获取选项卡的nsIDOMWindow来执行文本输入

时间:2016-05-29 12:41:51

标签: javascript firefox firefox-addon firefox-addon-sdk mozilla

是否可以在Firefox窗口的特定选项卡上使用文本输入处理器?

所有选项卡是否共享相同的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 个答案:

答案 0 :(得分:1)

nsIDOMWindow(+各种相关接口,如docshell)是w3c规范中常规window对象的XPCOM表示。并且由于窗口对象可以嵌套(例如通过iframe),因此可以是nsIDOMWindows。当您访问浏览器窗口时,您通常会访问代表浏览器镶边的外部窗口,而不是内容。

原则上,您可以直接从其<browser> XUL元素访问标签的内容窗口,但要与e10向前兼容,您应该使用framescripts