2010-11-26 40 views
4

Je me demande, est-il même possible de traiter la demande du composant Navigateur Xul pour ouvrir une nouvelle fenêtre? J'ai essayé de changer la fonction window.open, mais on dirait qu'elle n'a jamais été appelée. Tous les liens qui s'ouvrent dans une nouvelle fenêtre ne s'ouvrent pas dans mon application.Comment ouvrir une nouvelle fenêtre depuis le navigateur XUL?

J'ai trouvé this page sur le sujet, mais la solution fournie ne montre aucun comportement différent.

Un indice?

(en passant, je suis développement d'une application autonome, pas l'extension d'un Firefox)

Répondre

1

Je suppose que vous êtes dans une application XULRunner, et que vous essayez de charger une URL chrome à partir d'une source non-chrome dans un navigateur (par exemple de fichiers HTTP ou local). Bien qu'activer UniversalXPConnect et UniversalBrowserWrite peuvent être utiles, ils représentent également un risque de sécurité (puisque tout script arbitraire sur le Web pourrait les utiliser), ils ont donc tendance à être désactivés dans les navigateurs (par exemple, l'exécution de cette ligne dans Firebug):

>>> netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalBrowserWrite"); 
Error: A script from "http://stackoverflow.com" was denied UniversalXPConnect UniversalBrowserWrite privileges. 

Pourquoi ne pas essayer d'utiliser les principes de sécurité de codebase et voir si cela fait la différence? (http://www.mozilla.org/projects/security/components/signed-scripts.html#codebase). Pour moi, dans Firebug, il me permet d'obtenir les permissions supplémentaires après l'avoir OK avec une grosse boîte de dialogue, mais ne me permet toujours pas d'ouvrir une URL Chrome avec window.open. La prochaine étape est probablement d'essayer de changer votre fichier conf pour utiliser contentaccessible afin que les parties pertinentes de votre contenu sont accessibles (voir https://developer.mozilla.org/en/Chrome_Registration#contentaccessible).

Pour éviter le message désagréable lors de l'élévation des autorisations, vous pouvez essayer de définir automatiquement les autorisations pour les bons fichiers comme décrit au http://forums.mozillazine.org/viewtopic.php?f=38&t=1769555.

Vérifiez également le type de navigateur (https://developer.mozilla.org/en/XUL/Attribute/browser.type). Si le type de navigateur n'est pas de type chrome, cela peut valoir la peine d'essayer de le faire passer en mode chrome et de voir si cela fait une différence.

Si l'une de mes hypothèses est fausse revenir à moi et je vais essayer quelque chose d'autre.

+0

Pour en savoir plus sur les types de navigateurs, j'ai trouvé [cette page] (http://groups.google.com/group/mozilla.dev.platform/browse_thread/thread/5ba466727c590004/31ff12e59aa3c218?pli = 1) qui indique une préférence où je peux définir une fenêtre pour gérer les nouvelles ouvertures de la fenêtre. Merci! –

0

ne fonctionne pas js normale?

window.open(url,windowname,flags); 
+0

oui * (le minimum de caractères dans un commentaire est 15, ne détestez-vous pas?) * –

+0

aussi, j'ai essayé d'attribuer ma fonction à window.open, donc je pouvais voir si elle était appelée et ce n'est pas le cas. –

0

Il y a deux façons que je connais.

La première consiste à définir la préférence browser.chromeURL sur une URL chromée contenant un <browser type="content-primary">. La page que la fenêtre de contenu a essayé d'ouvrir va charger dans le navigateur donné.

La seconde consiste à définir la propriété window.browserDOMWindow avec un objet que vous définissez pour implémenter l'interface nsIBrowserDOMWindow. Cela vous permet de rediriger l'appel ouvert dans un onglet, si vous utilisez une interface à onglets. Remarque: les préférences de navigation par onglets doivent être définies pour autoriser le détournement des fenêtres en onglets, sinon XULrunner se rabattra sur browser.chromeURL.