Проблема с Jquery .load при работе с Iframes? - PullRequest
0 голосов
/ 14 сентября 2010

Я успешно использую следующий код для асинхронной загрузки некоторого содержимого на веб-страницу:

 jQuery.noConflict();
        jQuery("#boxasync").load("box.php", "",
            function(responseText, textStatus, XMLHttpRequest) {
                if(textStatus == 'error') {
                    jQuery('#boxasync').html('There was an error making the AJAX request');
                }});

Теперь при попытке использовать тот же код для загрузки общих кнопок общего доступа (tweetme, facebook, digg) содержимого веб-страницыстирается, и браузер устанавливается в своего рода состояние ожидания.

Я обнаружил, что эти кнопки общего доступа содержат встроенный код iframes (и, я боюсь, тоже javascript).

Может ли это быть причиной сбоя jQuery .load?

1 Ответ

0 голосов
/ 14 сентября 2010

Сценарии, разработанные для стороннего вызова, обычно используют document.write() для вывода своего содержимого.

Это нормально, когда загружается в прямой элемент <script> в источнике главной страницы, как на этом этапе.точка document.write просто добавляет вывод на страницу в позиции <script>, которая его вызвала.Но после загрузки страницы это нехорошо: нет никакой позиции для записи содержимого, поэтому вместо этого JS делает вывод, что вы хотели вызвать document.open(), чтобы написать совершенно новый документ перед вызовом write,Это разрушает содержимое текущей страницы.

Вы можете попытаться «обмануть» сторонние скрипты, создав собственную функцию, которая переопределяет document.write, перенаправляя передаваемые ей строки в переменную, которая затем может быть выведена встраница с использованием innerHTML / html().Но вам, возможно, будет лучше извлечь все из того, что делают сценарии, и сделать это самостоятельно.Сокращение зависимости от сторонних сценариев - это хорошо, потому что каждый раз, когда вы используете один из них, вы предоставляете этой стороне полный межсайтовый скриптинг доступ к контексту безопасности.

В любом случае вы никогда не должны использовать .load() или .html() для загрузки контента, включающего <script>, так как результаты крайне ненадежны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...