簡體   English   中英

注入的JavaScript不會執行

[英]Injected javascript does not execute

我正在嘗試編寫一個將網頁與外部系統集成的JavaScript。 目前,我所擁有的是一個非常少量的代碼,可以動態地將腳本元素插入到頁面中。

$(document).ready(function() {
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src = "http://example.com/example.php?arg1=1&arg2=2";
    document.body.appendChild(script);
});

外部系統返回的JS是一個大型的單行document.write調用,它將表寫入頁面。

document.write('<table><tr><td>blah</td></tr></table>');

當我將這個腳本元素注入頁面時,我可以使用DOM檢查器看到它,但腳本似乎沒有執行。 如果我手動將腳本元素放入HTML中,則javascript執行得很好(因此它不是相同的原始策略或格式錯誤的HTML錯誤...),但我希望它是動態的。

任何想法為什么javascript沒有執行?

在DOM准備好之后使用document.write將用你正在編寫的內容替換頁面的內容。

如果你想在頁面中插入任何東西,我建議使用一種實際的DOM操作方法。

至於腳本沒有執行,你肯定是正確附加嗎? 您是否嘗試在包含的腳本上設置javascript斷點以驗證是否是這種情況?

因為你只是包含它,而不是執行。 在使用jQuery時,請查看$.getScript()函數。

http://api.jquery.com/jQuery.getScript/

它將滿足您的需求。 這個函數是一個Ajax函數,所以要小心,因為它的行為是異步的。 使用其回調來執行基於加載腳本的代碼。

編輯: Felix糾正了我關於腳本執行的問題,但我仍然認為你可以試試這個功能。

嘗試使用此代碼(谷歌用於分析或facebook)。

把它放在你的頁面底部;)

<script type="text/javascript">
    (function() {
        var script = document.createElement('script'); 
            script.type = 'text/javascript'; 
            script.async = true;
        script.src = '/example.php?arg1=1&arg2=2';
        var s = document.getElementsByTagName('script')[0]; 
            s.parentNode.insertBefore(script, s);
    })();
</script>

或者像davidbuzatto建議的那樣,你必須使用$ .getScript()這是一個簡寫的$ .ajax()函數。

$(document).ready(function() {
    $.getScript("/example.php?arg1=1&arg2=2", function(data, textStatus, jqxhr) {
        console.log(data); //data returned
        console.log(textStatus); //success
        console.log(jqxhr.status); //200
        console.log('Load was performed.');
   });
});

編輯:看到你可能有跨域限制,只是嘗試使用相對網址“/example.php?arg1=1&arg2=2”而不是包含的完整網址。 或者,如果它不是同一個Web服務器,請使用跨域domain.xml文件。

我認為您需要使用JSONP來實現它並使用回調函數將其附加到body標簽

$(document).ready(function() {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "http://example.com/example.php?arg1=1&arg2=2&callback=showit(data)";
document.body.appendChild(script);
});

 function showit(data){document.write(data);}

為什么不直接將JS放在單獨的窗口/ iframe中執行並正確顯示表格,然后使用AJAX將該表拉到該頁面?

JQuery AJAX是最容易使用的IMO:

http://api.jquery.com/jQuery.ajax/

我總是看到這樣做更像:

document.write('<scr' + 'ipt>---scripthere---' + '</scr' + 'ipt>');

我假設是出於類似的原因。 嘗試而不是創建一個“真正的”腳本元素。

暫無
暫無

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

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