jQuery UI диалогов прозорец в рамките на рамката, от отметка?

Пиша отметка, която трябва да работи в контекста на страници, чийто дизайн не контролирам. Някои от страниците, за които имам нужда отметката да функционира в използват рамки (в набори от рамки). Възможно ли е диалоговият прозорец на 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