Диалоговое окно пользовательского интерфейса jQuery отображается внутри фрейма из букмарклета?

Я пишу букмарклет, который должен работать в контексте страниц, дизайн которых я не контролирую. На некоторых страницах мне нужен букмарклет для работы в фреймах (в наборах фреймов). Возможно ли, чтобы диалог jQuery-UI работал внутри фрейма?

В настоящее время, когда я сталкиваюсь со страницей с набором фреймов, я создаю свой диалог следующим образом:

var frame = window.frames[0];
var div = $(frame.document.createElement("div"));
div.html("My popup contents");
div.dialog( ... );

В результате jQuery добавляет элемент div ui-widget к основному документу, а не к документу фрейма. Поскольку основной документ представляет собой просто набор фреймов, ничего не отображается. Я не могу найти какие-либо параметры в API jquery-ui, чтобы указать, в каком документе должны быть созданы виджеты. Букмарклет обязательно будет запущен (или, по крайней мере, запущен) из контекста внешнего документа.

Я знаю, что будет невозможно отобразить наложение поверх фреймов ; Мне удобно отображать только в одном кадре. Кроме того, некоторые другие известные букмарклеты не работают на страницах с наборами фреймов, так что это может быть распространенной проблемой.

Предложения?


person user85461    schedule 06.07.2010    source источник


Ответы (2)


Букмарклеты обычно не используют jQuery. Большинство букмарклетов открывают окно с jQuery.

person mcandre    schedule 06.07.2010
comment
В моем случае букмарклет внедряет jQuery на страницу и запускает ее в режиме отсутствия конфликтов. Одним из требований к дизайну этого букмарклета является то, что он не открывает новые окна. - person user85461; 06.07.2010

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

Что-то вроде этого:

if (window.frames) {
    for (var i = 0; i < window.frames.length; i++) {
        // ... grab data from the frame ...
    }
}

if ($("frameset")) {
    $("html").children("frameset").remove();
    document.body = document.createElement("body");
    $("html").append(document.body);
    // ... add my stuff to body ...
}
person user85461    schedule 19.07.2010