[英]Including html+javascript with javascript
我正在研究這兩個現有鏈接,試圖結合此處列出的策略。
如何在另一個JavaScript文件中包含一個JavaScript文件?
我將問題歸結為一個簡單的腳本,該腳本演示了我遇到的問題。 我有這兩個文件:
test2.html:
<script type="text/javascript">alert('test');</script>
foreign html;
test1.html:
<script type="text/javascript" language="javascript">
var xmlhttp;
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
}
}
xmlhttp.open("GET", "test2.html", true);
xmlhttp.send();
</script>
<div id="myDiv">my div</div>
因此,顯然test1.html應該對test2.html進行ajax調用,並將其HTML寫入div。 當我運行test1.html時,它會執行此操作-div會顯示來自test2.html的“外國html”-但是它不會執行警報框。 直接訪問test2.html確實會顯示警報框。
因此,換句話說,我需要獲取遠程網頁的內容,並將其插入div中,並執行javascript。 “真實的” test2.html將使用jquery,因此test1.html無法使用它,否則我將兩次加載jquery。
==================================================
基於警告我有關XSS的評論並建議我更改體系結構,我正在對其進行詳細編輯。 這個項目的目標是我的用戶可以在他們的站點上粘貼HTML的“一部分”,這帶來了很多功能。 他們引入的功能包括加載jquery插件和HTML。 是的,我的用戶必須相信我不要XSS攻擊他們。 就像您相信Google在使用Google Analytics(分析)時不要XSS。 我的帖子不是要尋求安全建議。 我只想使這個簡單的“ hello world”類型示例工作。 真正的應用程序是安全的。
當我在test1.html中使用jquery時,確實導致了test2.html中的JS被執行,但這只是一個人為的示例,與我的實際應用程序相比,它過於簡化。 真正的應用程序在test2.html中使用了繁重的jquery-我需要能夠在服務器上更新test2.html,而不必為用戶提供新版本的test1.html。 僅將test2.html包含在內,將test1.html加載為其自己的jquery版本會產生很多開銷。
如果您確實想執行此操作,則可以將js包裝到div中,然后在加載test2.html的內容后使用eval()
執行javascript
例如
eval(document.getElementById('script').innerHTML);
但是,您應該考慮更改應用程序的體系結構,而改用回調函數
我還建議您使用類似jquery的庫,因為這樣可以簡化ajax調用和回調函數
我注意到的另一件事:您應該將javascript包裝到onload函數中。 如果不這樣做,則可能會導致JavaScript錯誤,因為您試圖將內容添加到div上,而該內容在調用函數時可能不存在
出於安全原因,您不應使用eval
...
采用
(new Function(document.getElementById('script').innerHTML))()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.