javascript - 嵌套的 document.writes 和第三方广告在 IE 中不起作用!!!!任何安全的解决方法?

标签 javascript jquery

注意:我编辑了这篇文章,其中包含我从第三方获得的更多信息。

简而言之,我的任务是包含一个调用我们内部广告服务器机制的 JS 广告标记,该机制然后重试第三方脚本,该脚本将文件写入其外部文件……它在 IE 中不起作用。有人向我提到嵌套的 document.writes 在 IE 中不起作用。我尝试了各种方法.. appendTo/writeln/分解脚本标签/解码脚本标签等..似乎没有任何效果。由于这对我来说有些陌生,也许我忽略了显而易见的事实。

这是它的样子:

my html:
<script language="JavaScript" type="text/javascript">
   document.write('\x3Cscript type="text/javascript" src="_some_Path_to_internal_ad_server">\x3C/script>';);
</script>

该调用最终会引入一些如下所示的代码:如您所见,没有封闭的脚本标签。

   tl1 = '989';
   tl2 = 'xnlll';
   document.write('<script type=\"text/javascript\" src=\"_some_Path_to_third_party.js\"><\/script>');

现在,“_some_Path_to_third_party.js”引入了一些具有 document.writes 和 document.writeln 的 js 代码

我是在脑子里乱写的,所以我不记得脚本标签是如何分解的,但我认为这不是问题所在。我相信这是 IE 中的嵌套 document.writes。

我尝试了各种方法,甚至在我的页面中布置了我的第一个脚本调用。没有 document.writes -- 只是

<script language="JavaScript" type="text/javascript" src="_some_Path_to_internal_ad_server">

没有骰子。

但是直接调用外部 js 确实有效(删除了我对内部广告服务器的调用,该服务器随后调用了第三方调用),ala:

<script language="JavaScript" type="text/javascript" src="_some_Path_to_internal_ad_server">

有没有人有处理过这样的事情的经验以及如何克服它?

最佳答案

由于您没有发布足够的详细信息来为您的问题写出完整的答案(您写道:“我正在写这个,所以我不记得脚本标签是如何分解的” ) 所以这里有一些帮助您入门的一般提示,而不是直接的解决方案。你说你确信问题出在 document.write 太多了所以我会集中精力尽可能减少他们的数量。希望它能让您最终解决问题。

额外的分号

在你的第一个例子中你有:

document.write(' ... ';);

删除多余的分号将是:

document.write(' ... ');

这会导致一些问题吗?如果没有,请继续阅读...

首先是一些基础知识:

脚本类型和语言

<script language="JavaScript" type="text/javascript">

“语言”属性已弃用,因此不要使用它。 “type”属性的问题在于 text/javascript MIME 类型已过时(参见 RFC4329 )并且 application/javascript(正确的类型)未得到普遍支持。在实践中,每个浏览器都知道没有“类型”它只是 JavaScript,这就是为什么我建议在它是可选的每个标记版本(如 HTML5)中都不要使用它。 (此外,MIME 类型应该由服务器指定。)参见 this question获取更多信息。话虽如此,我将只使用 <script>在下面的示例中。

最小化文档写入

在你的 HTML 中有这个:

<script>
    document.write('\x3Cscript src="file.js">\x3C/script>');
</script>

完全等同于:

<script src="file.js"></script>

使用 document.write 很有意义在这种情况下,除非你在 JavaScript 或类似的东西中动态构建脚本名称,但即便如此你也可以在没有 document.write 的情况下完成它.

如果您不知道脚本的路径并且正在使用例如。一个名为 path 的 JavaScript 变量那么你可能会想写这样的东西:

<script>
    document.write('\x3Cscript src="' + path + '">\x3C/script>');
</script>

但是您可以使用类似于 Google 用于 Analytics 的东西获得几乎相同的结果:

var newScript = document.createElement('script');
newScript.src = path; // or newScript.src = 'file.js';
var firstScript = document.getElementsByTagName('script')[0];
firstScript.parentNode.insertBefore(newScript, firstScript);

或更短,使用 appendChild :

var newScript = document.createElement('script');
newScript.src = path; // or newScript.src = 'file.js';
document.body.appendChild(newScript);

或者更容易使用 jQuery:

$('<script />', {src: path}).appendTo('body');

哪里path是脚本的 URL。或者部分使用 jQuery 只是为了插入到 DOM 中:

var newScript = document.createElement('script');
newScript.src = path; // or newScript.src = 'file.js';
$('body').append(newScript);

您也可以使用 jQuery.getScript:

$.getScript(path);

更多想法

其他想法见:

这些是您可以做的一些基本事情,以尽量减少 document.write 的使用。 .希望这能让您入门。

关于javascript - 嵌套的 document.writes 和第三方广告在 IE 中不起作用!!!!任何安全的解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11554244/

相关文章:

javascript - 链接第一次点击后,使链接不可点击,等待过渡结束+1s,然后再次使链接可点击

jquery - 在链式选择框上应用 jquery 选择框样式

javascript - jquery验证错误

javascript - .show() 在页面加载时不起作用

javascript - jQuery 如何在值大于 1 时更改 CSS

javascript - 倒带 CSS 动画

JavaScript:让代码每分钟运行一次

javascript - 通过 JavaScript 操作 <div> 的位置

php - 获取浏览器选项卡索引/Id

javascript - 如何将隐藏的<dl>元素一个一个显示或者同时全部显示?