2010-11-26 131 views
4

我想知道,是否可以將Xul瀏覽器組件的請求視爲打開一個新窗口?我試着改變window.open函數,但看起來像它從未被調用過。 所有在新窗口中打開的鏈接都不會在我的應用程序中打開。如何從XUL瀏覽器打開新窗口?

我發現this page的主題,但提供的解決方案沒有顯示不同的行爲。

對此有何暗示?

(順便說一下,我正在開發一個獨立的應用程序,而不是Firefox的擴展)

回答

1

我假設你是在一個應用程序的XULRunner,而且你要加載從非鉻源的鍍鉻URL在瀏覽器(如HTTP或本地文件)。雖然啓用UniversalXPConnect和UniversalBrowserWrite可能會有所幫助,但它們也具有安全風險(因爲Web上的任意腳本都可以使用它們),所以它們往往會在瀏覽器中被禁用(例如,在Firebug中運行該行會給您一個例外):

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

你如何嘗試使用代碼庫安全主體,看看是否有所作爲? (http://www.mozilla.org/projects/security/components/signed-scripts.html#codebase)。對於我來說,在Firebug中,我確實可以通過一個大的,令人討厭的對話框來獲得額外的權限),但仍然無法使用window.open打開Chrome網址。下一步可能是嘗試更改conf文件以使用可訪問的內容,以便訪問內容的相關部分(請參閱https://developer.mozilla.org/en/Chrome_Registration#contentaccessible)。

爲了避免提升權限時的惡意郵件,您可以嘗試自動設置正確文件的權限,如http://forums.mozillazine.org/viewtopic.php?f=38&t=1769555所述。

此外,請確保您檢查瀏覽器類型(https://developer.mozilla.org/zh/XUL/Attribute/browser.type)。如果瀏覽器類型不是Chrome瀏覽器,那麼可能值得嘗試使其成爲Chrome瀏覽器並查看是否有所作爲。

如果我的任何假設是錯誤的回到我身上,我會嘗試別的。

0

不正常的js不工作?

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

是*(評論中字符的最小值是15,你不討厭這個嗎?)* – 2010-12-09 16:18:23

+0

另外,我試着將我的函數歸屬於window.open,所以我可以看看它是否被調用,而不是。 – 2010-12-09 16:22:00

0

我知道有兩種方法。

第一種是將browser.chromeURL首選項設置爲包含<browser type="content-primary">的鑲邊網址。內容窗口嘗試打開的頁面將加載到給定的瀏覽器中。

第二個是使用您定義的對象來設置屬性window.browserDOMWindow以實現nsIBrowserDOMWindow接口。如果您正在使用選項卡式界面,則可以將打開的呼叫轉移到選項卡中。注意:必須將選項卡式瀏覽首選項設置爲允許窗口轉到選項卡,否則XULrunner將退回browser.chromeURL