Javascript在页面加载后添加<script>标记</script>

时间:2014-03-24 22:20:22

标签: javascript jquery html

这里有点问题。基本上,我在页面加载后尝试添加脚本标记。

这就是我在做的事情:

的index.php:

<html>
<head>
   <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
   <script>
   function getad()
   {
        $.post('assets/getad.php', "ad", function(response) {
            response = response.replace('document.write','document.getElementById("ad").innerHTML = ');
            eval(response);
            console.log(response);
        });
   }
   getad();
   </script>    
<div id="ad"></div>
</body>
</html>

getad.php:

<?php
    echo file_get_contents("http://ads1.qadabra.com/t?id=a823aca3-9e3c-4ddd-a0cc-14b497cad85b&size=300x250");
?>

您可以在此处找到演示:http://dev.cj.gy/game/

正如您所看到的,#div div已经填充了正确的脚本标记,但它实际上并没有运行,如果我编辑页面以在页面加载时包含脚本标记,它确实会运行。

1 个答案:

答案 0 :(得分:0)

是的,<script>标签在作为主文档的一部分进行解析时会导致执行;他们不会被写入innerHTML执行。

您可以使用调用createElement('script')的DOM方法在该初始解析之外创建执行脚本元素,设置其src /内容并将其添加到文档中。这就是jQuery的getScript所做的。

然而,它不会对你有好处,因为ads1.qadabra.com document.write document.write页面的下一个脚本本身也会调用getad.php

您可以在客户端处理这两个调用(即没有document.write),方法是将自己的自定义函数分配给{{1}},而不是写入加载页面,尝试提取传递给它的脚本标记的源,并将其加载到DOM创建的脚本元素中。

但一般来说,这些脚本旨在在文档加载时同步工作;你做的任何事情都试图强迫他们以他们不打算的方式运行,这可能是脆弱的,当广告网络发生任何变化时就会停止工作。

如果您想加载第三方广告而不暂停加载父文档,我建议将其放入iframe中。