微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在Firefox扩展名中解析xmlHttpRequest responseText

如何解决无法在Firefox扩展名中解析xmlHttpRequest responseText

|| 我正在构建一个firefox扩展,并且在扩展中,我正在发出一个ajax请求,该请求返回一个responseText,现在我想解析js中的responseText,但是我无法解析该请求。 请注意,如果我在网络服务器上运行相同的代码,则可以正常运行。下面是代码
var myHTML = XHR.responseText;
var tempDiv = document.createElement(\'div\');

tempDiv.innerHTML = myHTML;
tempDiv.childNodes;
tempDiv.getElementsByTagName(\'a\'); // etc. etc.
如果我在网络服务器上使用此代码,则可以解析childNodes并检索其值,但如果我在firefox扩展中使用此代码,则即使我在使用时可以看到responseText,也无法访问childNodes。在Firefox扩展中。 我对同一代码的这种无关紧要的行为感到困惑,请帮帮我。     

解决方法

        最好不要将从远程服务器收到的HTML代码直接插入特权文档中-这是一个安全漏洞。即使您控制服务器,并且绝对确定服务器也不会被黑客入侵,但数据可能已经被篡改了。通过使用innerHTML,您可以运行与HTML代码一起发送的JavaScript代码,并且该JavaScript代码将以扩展名的特权执行(这意味着它几乎可以执行任何操作)。 您应该改为创建“ 1”,并确保文档和该框架之间存在安全边界(type = \“ content \”可以做到这一点)。像这样:
var myHTML = XHR.responseText;
var tempFrame = document.createElement(\"iframe\");
tempFrame.setAttribute(\"type\",\"content\");
tempFrame.setAttribute(\"src\",\"data:text/html;charset=utf-8,\" + encodeURIComponent());
document.documentElement.appendChild(tempFrame);
tempFrame.contentWindow.addEventListener(\"load\",function()
{
    tempFrame.contentDocument.documentElement;
    tempFrame.contentDocument.getElementsByTagName(\'a\');
    ...
    tempFrame.parentNode.removeChild(tempFrame);
},false);
如果您具有格式正确的XML,那么事情当然会更容易。然后解析它只是一个问题:
var doc = new DOMParser().parseFromString(XHR.responseText,\"text/xml\");
doc.documentElement;
doc.getElementsByTagName(\'a\');
编辑:在我写完这篇文章后,事情发生了变化-从Firefox 10开始,对于格式不正确的HTML代码,您还可以使用ѭ4use。因此,如果您只需要从一段HTML代码中提取一些数据,则不应该使用框架,而应使用“ 5”。     ,        “ 6”设置器的行为取决于您所使用的文档类型。Firefoxchrome是XML文档,因此在上面的代码段中,“ 7”字符串将被解析为XML。在网页中,您可能正在编写HTML,而不是XML,因此需要进行HTML解析。您的字符串是否恰好是HTML而不是格式正确的XML?     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。