2010-11-26 6 views
4

Ich frage mich, ist es sogar möglich, die Anfrage für die Xul-Browser-Komponente zu behandeln, um ein neues Fenster zu öffnen? Ich habe versucht, die Funktion window.open zu ändern, sieht aber so aus, als würde sie nie aufgerufen. Alle Links, die in einem neuen Fenster geöffnet werden, werden in meiner Anwendung nicht geöffnet.Wie öffne ich ein neues Fenster von XUL Browser?

Ich fand this page zu dem Thema, aber die zur Verfügung gestellte Lösung zeigt kein anderes Verhalten.

Irgendein Hinweis darauf?

(übrigens, ich bin eine Stand-alone-Anwendung zu entwickeln, nicht eine Erweiterung des Firefox)

Antwort

1

Ich nehme an, Sie in einer XULRunner-Anwendung sind, und dass Sie versuchen, in einem Browser eine Chrom-URL von einer Nicht-Chrom-Quelle zu laden (z HTTP oder lokale Datei). Obwohl die Aktivierung von UniversalXPConnect und UniversalBrowserWrite hilfreich sein kann, stellen sie auch ein Sicherheitsrisiko dar (da sie von jedem beliebigen Skript im Web verwendet werden können), sodass sie in Browsern deaktiviert sind. Wenn Sie beispielsweise diese Zeile in Firebug ausführen, erhalten Sie eine Ausnahme):

Wie wäre es, wenn Sie versuchen, Codebase-Sicherheitsprinzipale zu verwenden und zu sehen, ob das einen Unterschied macht? (http://www.mozilla.org/projects/security/components/signed-scripts.html#codebase). Für mich in Firebug erlaubt es mir, die zusätzlichen Berechtigungen zu bekommen, nachdem ich es mit einem großen, fiesen schauenden Dialog OK habe), aber erlaubt mir immer noch nicht, eine Chrome URL mit window.open zu öffnen. Der nächste Schritt besteht wahrscheinlich darin, zu versuchen, Ihre conf-Datei so zu ändern, dass sie contentaccessible verwendet, damit auf die relevanten Teile Ihres Inhalts zugegriffen werden kann (siehe https://developer.mozilla.org/en/Chrome_Registration#contentaccessible).

Um die unangenehme Nachricht zu vermeiden, wenn Berechtigungen erhöht werden, können Sie versuchen, Berechtigungen für die richtigen Dateien automatisch zu setzen, wie unter http://forums.mozillazine.org/viewtopic.php?f=38&t=1769555 beschrieben.

Überprüfen Sie auch den Browsertyp (https://developer.mozilla.org/en/XUL/Attribute/browser.type). Wenn der Browsertyp nicht chrome ist, könnte es einen Versuch wert sein, Chrome zu erstellen und zu sehen, ob das einen Unterschied macht.

Wenn irgendeine meiner Annahmen falsch sind, zurück zu mir und ich werde etwas anderes versuchen.

+0

Suche nach mehr über Browsertypen, fand ich [diese Seite] (http://groups.google.com/group/mozilla.dev.platform/browse_thread/thread/5ba466727c590004/31ff12e59aa3c218?pli = 1), die von einer Vorliebe erzählt, wo ich ein Fenster einstellen kann, um die neuen Fensteröffnungen zu behandeln. Vielen Dank! –

0

nicht normale js nicht?

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

ja * (das Minimum der Zeichen in einem Kommentar ist 15, hasst du das nicht?) * –

+0

auch, ich habe versucht, meine Funktion zu window.open, so dass ich sehen konnte, ob es aufgerufen wurde und es ist nicht. –

0

Es gibt zwei Möglichkeiten, die ich kenne.

Die erste besteht darin, die browser.chromeURL-Einstellung auf eine Chrome-URL zu setzen, die eine <browser type="content-primary"> enthält. Die Seite, die das Inhaltsfenster öffnen wollte, wird in den angegebenen Browser geladen.

Die zweite besteht darin, die Eigenschaft window.browserDOMWindow mit einem Objekt zu definieren, das Sie definieren, um die Schnittstelle nsIBrowserDOMWindow zu implementieren. Dadurch können Sie den offenen Anruf in eine Registerkarte umleiten, wenn Sie eine Schnittstelle mit Registerkarten verwenden. Hinweis: Die Tab-Browsing-Einstellungen müssen so eingestellt sein, dass Fenster in Registerkarten umgeleitet werden können. Andernfalls greift XULrunner auf browser.chromeURL zurück.