Предотвратить iFrame от изменения местоположения? - PullRequest
2 голосов
/ 08 апреля 2011

У меня есть простое приложение, которое анализирует шаблоны блогов Tumblr. Он смоделирован после их экрана настройки и содержит заголовок с некоторыми настраиваемыми параметрами и iframe. Каждый раз, когда параметр изменяется, приложение перезагружает iframe, сериализуя форму конфигурации и обновляя iframe src с сериализованными данными в виде строки запроса.

Это все работает нормально, за исключением того, что всякий раз, когда это происходит, я могу перезагрузить только главную страницу индекса с измененными параметрами. Если пользователь хочет просмотреть, скажем, одну страницу публикации, отойдя от индекса, шаблон отображает эту страницу только с параметрами по умолчанию. Другими словами, измененные параметры не сохраняются, пока пользователь перемещается по блогу.

Мне удалось получить «постоянные изменения» с событием $('iframe').load(), например:

$('iframe').load(function(){
  updateTheme();
});

Единственная проблема, как вы можете сказать, заключается в том, что iframe будет ждать полного отображения страницы с использованием параметров по умолчанию, а затем повторно отображать ее с обновленными параметрами. Я имею в виду ... это работает, но это не очень хорошее решение.

Кто-нибудь знает, как я могу предотвратить загрузку iframe, захват желаемого местоположения пользователя, а затем повторно выполнить рендеринг кадра с текущими параметрами, представленными в заголовке?

Любая помощь будет принята с благодарностью. Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 13 апреля 2011

Вот что я придумала:

var p = top || parent;

(function($){
  $('a').click(function(e) { 
    var prevent = e.isDefaultPrevented(),
        is_local = p.isLocal(this.href),
        is_hash = $(this).attr('href').match(/^#/);

    if(prevent || ! is_local || is_hash) return;
    e.prevenDefault();
    p.updateTheme(this.href);
    return false;
  });
})(jQuery);

Меня беспокоило, что я буду влиять на события javascript, прикрепленные к тегам <a/> пользователем, но, по-видимому, jQuery будет обнаруживать предотвращенные по умолчанию события, дажеесли бы они не были предотвращены с помощью самого jQuery.Я проверил это так:

document.getElementById('test-link').onclick = function() {
    return false;
}

jQuery обнаруживает, что исходное событие было предотвращено, поэтому я просто предполагаю, что не должен продолжать.

1 голос
/ 11 апреля 2011

Вы размещаете как страницу верхнего уровня, так и встроенную страницу iframe?Если так, есть некоторые игры, в которые вы можете играть, но это не красиво.Например, вы можете переписать ссылки во встроенном iframe, чтобы предварительно заполнить параметры конфигурации, например, что-то вроде:

$('iframe').load(function(){
  $('a', $('iframe')).each(function() {
    var new_url = this.attr("href");
    new_url += config_options;
    this.attr("href", new_url);
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...