Небезопасный JavaScript выдает ошибку доступа к фрейму в Chrome при замене textNode - PullRequest
1 голос
/ 27 января 2011

Я пытаюсь заменить каждое textNode дерева DOM, используя следующую функцию:

//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 из фрейма с URL-адресом http://c -jfmunoz: 5000 / SitePages / Home.aspx .Домены, протоколы и порты должны совпадать.

Выполняя некоторую отладку, я смотрю, что это вызывает исключение при вставке текстового узла в веб-форму.

Я должен прикрепить этот JavaScriptна сайт Sharepoint 2010.При локальном просмотре Chrome не выдает исключение.

Как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 27 января 2011

Что ж, если на сайте есть фреймы / фреймы, которые загружают данные из другого домена, который не принадлежит вашему javascript-коду, это вызовет исключение.

Запрещено читать / изменять любые данные, поступающие издругой домен (см .: AJAX cross-domain request, на самом деле это та же проблема).

Единственное решение - это проверить наличие в вашем цикле iframes и , а не для доступа к ним.

1 голос
/ 27 января 2011

Вы не можете обойти тот факт, что он не хочет делать iframe, так оно и есть, но вы можете избежать ошибок, заменив

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

на

 this.contents().not('iframe').each(function(){
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...