[英]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:
我總是看到這樣做更像:
document.write('<scr' + 'ipt>---scripthere---' + '</scr' + 'ipt>');
我假設是出於類似的原因。 嘗試而不是創建一個“真正的”腳本元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.