注入的JavaScript不会执行

时间:2012-08-22 12:21:15

标签: javascript jquery

我正在尝试编写一个将网页与外部系统集成的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没有执行的任何想法?

6 个答案:

答案 0 :(得分:2)

在DOM准备好之后使用document.write将用您正在编写的内容替换页面的内容。

如果你想在页面中插入任何内容,我建议使用一种实际的DOM操作方法。

如果脚本没有执行,你肯定是正确附加吗?您是否尝试在包含的脚本上设置javascript断点以验证是否存在这种情况?

答案 1 :(得分:1)

因为你只是包含它,而不是执行。当你使用jQuery时,看看$.getScript()函数。

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

它将满足您的需求。这个函数是一个Ajax函数,所以要小心,因为它的行为是异步的。使用其回调来执行基于加载脚本的代码。

编辑:菲利克斯纠正了我关于脚本执行的问题,但我仍然认为您可以尝试使用该功能。

答案 2 :(得分:1)

尝试使用此代码(谷歌也可以将其用于分析或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.');
   });
});

修改: 你可能有跨域限制,只是尝试使用相对URL“/example.php?arg1=1&arg2=2”而不是包含的完整URL。 或者,如果它不是同一个Web服务器,请使用跨域文件。

答案 3 :(得分:0)

我认为你需要使用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);}

答案 4 :(得分:0)

为什么不直接将JS放在单独的窗口/ iframe中执行并正确显示表格,然后使用AJAX将该表拉到该页面?

JQuery AJAX是最容易使用的IMO:

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

答案 5 :(得分:0)

我一直认为这更像是:

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

我认为这是出于类似的原因。尝试而不是创建一个“真正的”脚本元素。