2010-07-06 5 views
0

J'écris un bookmarklet qui doit travailler dans le contexte des pages dont la conception que je ne contrôle pas. Certaines pages nécessitent le bookmarklet pour fonctionner dans des cadres d'utilisation (dans des framesets). Est-il possible qu'une boîte de dialogue jQuery-UI fonctionne dans un cadre?Affichage de la boîte de dialogue jQuery UI dans le cadre, à partir du bookmarklet?

Actuellement, quand je rencontre une page avec un jeu de cadres, je crée ma boîte de dialogue comme ceci:

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

Le résultat est que jQuery ajoute le div ui-widget au document principal, plutôt que le document du cadre . Comme le document principal n'est qu'un jeu de cadres, rien n'est affiché. Je ne trouve aucune option dans l'API jquery-ui pour spécifier le document dans lequel les widgets doivent être construits. Le bookmarklet sera nécessairement exécuté (ou au moins démarré) à partir du contexte du document externe.

Je suis conscient que ce ne sera pas possible d'afficher une superposition over the frames; Je suis à l'aise avec l'affichage juste dans un seul cadre. En outre, certains other notable bookmarklets ne fonctionnent pas sur les pages avec des jeux de cadres, ce qui peut être un problème commun.

Suggestions?

Répondre

0

Voici ce que j'ai fini par faire: plutôt que d'essayer d'afficher dans ou au-dessus d'une image, j'ai simplement réécrit la page pour supprimer les cadres et ajouter mon propre corps et contenu à la page. Cela permet au bookmarklet d'introspecter les images et d'obtenir les données dont il a besoin pour construire l'overlay avant de supprimer les framesets, mais permet à l'overlay de fonctionner.

Quelque chose comme ceci:

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 ... 
} 
0

Bookmarklets généralement ne pas utiliser jQuery. La plupart des bookmarklets ouvrent une fenêtre qui a jQuery.

+0

Dans mon cas, le bookmarklet injecte jQuery dans la page et l'exécuter en aucun conflit en mode. Une des exigences de conception pour ce bookmarklet est qu'il n'ouvre pas de nouvelles fenêtres. – user85461

Questions connexes