gpt4 book ai didi

JavaScript 将 HTML 写入 iFrame - IE 不加载外部脚本,或搞乱编码

转载 作者:行者123 更新时间:2023-12-02 17:50:37 25 4
gpt4 key购买 nike

我想使用 JavaScript 将完整的 HTML 文档写入 iframe。在大多数情况下,以下解决方案效果很好:

var iFrameDoc = iFrame.contentDocument || iFrame.contentWindow.document;
iFrameDoc.open();
iFrameDoc.write(htmlString);
iFrameDoc.close();

但是,如果HTML文档包含对外部脚本的引用,并且浏览器是IE(使用IE8进行测试,不确定其他版本),则失败。例如,这样的 HTML 文档:

<html>
<head>
<script src="script.js"></script>
</head>
<body>
<script>alert(variableFromExternalScript)</script>
</body>
</html>

在 Firefox 和 Chrome 中,上述工作正常,但在 IE8 中却失败,因为外部脚本未执行。

我找到了一个如下所示的解决方法:

iFrame.contentWindow.contents = htmlString;
iFrame.src = 'javascript:window["contents"]';

这似乎适用于所有主要浏览器。外部脚本按其应有的方式加载。但是,如果HTML文档中包含任何特殊字符(例如中文),则文本在IE中会出现乱码。一切都是UTF-8,在其他浏览器中运行良好,并且IE设置为以UTF-8渲染页面,但iFrame中的文本是乱码。

因此,我有一个解决方案,可以使用正确的编码显示文本,但不加载外部脚本;另一个解决方案加载外部脚本,但会混淆文本。对于解决这两个问题的解决方案有什么建议吗?

HTML 文档是动态加载的,因此我无法对其进行更改,例如删除外部脚本。

最佳答案

我想出了一个解决方法。我确信有更好的解决方案,但目前这似乎可行:

首先,我操作 HTML 字符串中的所有脚本标记,以便它们不会被执行。我将“src”属性替换为“xsrc”,并将所有内部文本替换为“xinnertext”属性。然后我使用 iFrameDoc.write(htmlString) 方法将 HTML 字符串写入 iFrame。编码全部正确,并且没有执行任何脚本。

然后我使用 jQuery 来一一浏览所有脚本。我手动重新创建一个脚本 (iFrameDoc.createElement('script')) 并将其附加到 DOM 的正确位置(在操作的脚本标记旁边)。

我使用加载事件来确保每个脚本在下一个脚本执行之前加载。

不是最佳的,但它可以在 IE8 中工作。

关于JavaScript 将 HTML 写入 iFrame - IE 不加载外部脚本,或搞乱编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21307098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com