替换textNode时,不安全的JavaScript会尝试在Chrome中访问框架错误

时间:2011-01-27 14:31:07

标签: javascript jquery dom google-chrome

我正在尝试使用以下函数替换DOM树的每个textNode

//Replace each word objective with reposition in each control of the actual jQuery object   
jQuery.fn.replaceEachOne = function (objective, reposition) {
    var regExp = new RegExp('([\\s]'+objective+'[\\s])', "igm");
    this.contents().each(function(){
                if (this.nodeType == 3) {//if is a Node.TEXT_NODE, IE don't have Node object
                    //console.log("pName: "+this.parentNode.nodeName+" pType: "+this.parentNode.nodeType+" Data: " + this.parentNode.data);
                    if(this.data.search(regExp) != -1){
                        var temp = document.createElement("span");

                        temp.innerHTML = this.data.replace(regExp, reposition);

                        //Insert the new one
                        this.parentNode.insertBefore(temp, this);

                        // Remove original text-node:
                        this.parentNode.removeChild(this);
                    }
                }
                else{
                    $(this).replaceEachOne(objective, reposition);
                } 
            }); 
}

它可以正常工作,但它会抛出20个这样的错误(Google Chrome,IE不会抛出):

  

不安全的JavaScript尝试访问   带URL的框架   http://cdn.apture.com/media/html/aptureLoadIframe.html?v=21872561   来自带框架的框架   http://c-jfmunoz:5000/SitePages/Home.aspx。   域,协议和端口必须   匹配。

进行一些调试我认为当textnode插入到Web表单时它会引发异常。

我必须将此JavaScript附加到Sharepoint 2010站点。在本地查看时,Chrome不会抛出异常。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

你无法解决这样一个事实:它不想做iframe,就像它一样,但你可以通过替换来避免错误

 this.contents().each(function(){

使用

 this.contents().not('iframe').each(function(){

答案 1 :(得分:1)

好吧,如果该网站的框架/ iframe加载来自另一个域的数据,而不是您的javascript代码也属于,那么这将引发异常。

不允许读取/修改来自其他域的任何数据(请参阅:AJAX cross-domain request,这实际上是同一个问题)。

唯一的解决方案是检查循环中的iframe,然后来访问这些iframe。