首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript向iFrame - IE写入超文本标记语言,不加载外部脚本,或扰乱编码

问JavaScript向iFrame - IE写入超文本标记语言,不加载外部脚本,或扰乱编码
EN

Stack Overflow用户
提问于 2014-01-23 19:39:34
回答 1查看 586关注 0票数 3

我想用JavaScript来写一个完整的超文本标记语言文档到iframe。以下解决方案在大多数情况下都能很好地工作:

代码语言:javascript
复制
var iFrameDoc = iFrame.contentDocument || iFrame.contentWindow.document;
iFrameDoc.open();
iFrameDoc.write(htmlString);
iFrameDoc.close();

但是,如果超文本标记语言文档包含对外部脚本的引用,并且浏览器是IE (使用IE8进行测试,不确定是否有其他版本),则会失败。例如,如下所示的HTML文档:

代码语言:javascript
复制
<html>
 <head>
  <script src="script.js"></script>
 </head>
 <body>
  <script>alert(variableFromExternalScript)</script>
 </body>
</html>

在火狐和Chrome中,上述功能运行良好,但在IE8中,由于未执行外部脚本,因此无法正常运行。

我找到了一个解决方法,看起来像这样:

代码语言:javascript
复制
iFrame.contentWindow.contents = htmlString;
iFrame.src = 'javascript:window["contents"]';

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

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

HTML文档是动态加载的,所以我不能对其进行更改,比如删除外部脚本。

EN

回答 1

Stack Overflow用户

发布于 2014-01-27 20:19:22

我想出了一个变通办法。我确信有一个更好的解决方案,但就目前而言,这似乎是有效的:

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

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

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

不是最优的,但它在IE8中工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21307098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档