簡體   English   中英

包括html + javascript和javascript

[英]Including html+javascript with javascript

我正在研究這兩個現有鏈接,試圖結合此處列出的策略。

如何在另一個JavaScript文件中包含一個JavaScript文件?

動態插入的jQuery庫完成加載后執行我的jQuery腳本

我將問題歸結為一個簡單的腳本,該腳本演示了我遇到的問題。 我有這兩個文件:

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))()

https://stackoverflow.com/a/19711866/2450730

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM