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

Javascript adding <script> tag after page loads

本文关键字:加载 添加 script Javascript      更新时间:2023-09-26

这里有个小问题。基本上,我试图在页面加载后添加一个脚本标签。

这就是我正在做的:

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/

正如你所看到的,#addiv确实被正确的脚本标签填充,但它实际上并没有运行,如果我在页面加载时编辑页面以包含脚本标签,它就会运行。

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

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

然而,它不会做你太多的好,因为下一个脚本,ads1.qadabra.comdocument.write到页面,也自己调用document.write

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

但是一般来说,这些脚本被设计为在文档加载时同步工作;你所做的任何试图强迫它们以一种它们不希望的方式运行的事情都可能是脆弱的,并且在AD网络改变任何东西时停止工作。

如果你想加载第三方广告而不暂停父文档的加载,我建议把它放在iframe