2016-05-29 15 views
0

是否可以在Firefox窗口的特定選項卡上使用文本輸入處理器?獲取標籤的nsIDOMWindow以進行文本輸入

是否所有選項卡共享相同的nsIDOMWindow對象?如果是這樣,那麼還有其他解決方案嗎?

改寫我的問題:我想輸入文本到一個特定的選項卡,如果有多個,那麼它可能不是當前。

下面是一個例子代碼編寫任何Firefox窗口上的文本,但僅限於當前標籤:

function myTestFunc() { 
    // var windows = Services.wm.getEnumerator("navigation:browser"); 
    var windows = require("sdk/windows"); 
    for (let browserWindow of windows.browserWindows) { 
    //console.log(window.title); 
    var chromeWindow = viewFor(browserWindow); 
    console.log(chromeWindow.document.location.href); 
    var idomWindow = chromeWindow.QueryInterface(Ci.nsIDOMWindow); 

    var TIP = Cc["@mozilla.org/text-input-processor;1"]. 
       createInstance(Ci.nsITextInputProcessor); 
    if(!TIP.beginInputTransaction(idomWindow, onNotifyImpl)) { 
     console.log("Error TIP can't start"); 
     continue; 
    } 
    TIP.setPendingCompositionString("foo-bar-buzz"); 
    if (!TIP.flushPendingComposition()) { 
     console.log("Failed to flush"); 
     continue; // Composition is not started 
    } 
    } 

} 

回答

1

nsIDOMWindow(+像docshell各種相關的界面)是在常規window對象的XPCOM表示W3C規格。由於窗口對象可以嵌套(例如通過iframe),因此可以是nsIDOMWindows。當你訪問瀏覽器窗口時,你通常訪問代表瀏覽器瀏覽器的外部窗口,而不是內容。

原則上,您可以直接從其<browser> XUL元素訪問選項卡的內容窗口,但要與e10s正向兼容,您應該使用framescripts代替。

+0

請問您是否可以詳細說明如何從''XUL元素獲取?不幸的是對於我的用例,framescripts不是一個選項。 – alandarev

+0

我不打算支持創建會破壞e10s兼容性的插件。相反,你應該解釋爲什麼你認爲你不能使用framescripts。 – the8472

+0

這一切都從這裏開始:http://stackoverflow.com/questions/11456705/are-events-generated-by-firefox-extension-trusted/11461469#comment58574373_11461469我需要生成具有'isTrusted = true'的鍵盤事件屬性。 – alandarev