这里有点问题。基本上,我在页面加载后尝试添加脚本标记。
这就是我在做的事情:
的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已经填充了正确的脚本标记,但它实际上并没有运行,如果我编辑页面以在页面加载时包含脚本标记,它确实会运行。
答案 0 :(得分:0)
是的,<script>
标签在作为主文档的一部分进行解析时会导致执行;他们不会被写入innerHTML
执行。
您可以使用调用createElement('script')
的DOM方法在该初始解析之外创建执行脚本元素,设置其src
/内容并将其添加到文档中。这就是jQuery的getScript
所做的。
然而,它不会对你有好处,因为ads1.qadabra.com
document.write
document.write
页面的下一个脚本本身也会调用getad.php
。
您可以在客户端处理这两个调用(即没有document.write
),方法是将自己的自定义函数分配给{{1}},而不是写入加载页面,尝试提取传递给它的脚本标记的源,并将其加载到DOM创建的脚本元素中。
但一般来说,这些脚本旨在在文档加载时同步工作;你做的任何事情都试图强迫他们以他们不打算的方式运行,这可能是脆弱的,当广告网络发生任何变化时就会停止工作。
如果您想加载第三方广告而不暂停加载父文档,我建议将其放入iframe中。