javascript - 获取选项卡的 nsIDOMWindow 进行文本输入

标签 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
    }
  }

}

最佳答案

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

原则上,您可以直接从选项卡的 <browser> 访问选项卡的内容窗口。 XUL 元素,但为了与 e10s 向前兼容,您应该使用 framescripts相反。

关于javascript - 获取选项卡的 nsIDOMWindow 进行文本输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37510020/

相关文章:

javascript - 在现有 jQuery Accordion 下拉菜单的内容顶部添加一个下拉框,将内容向下推

javascript - 如何仅在 Firefox 上显示/隐藏 jquery 脚本

javascript - Selenium IDE 1.4.1 在上传本地文件时抛出安全错误

xml - 火狐 XPCOM 插件 : "unexpected error" for xslt transform

javascript - 通过从另一个日期选择器中选择一个日期来禁用 JQuery 日期选择器日期

javascript - 使用 JavaScript 和 Jade 添加到 localStorage

javascript - 如何使用这个 jQuery 来影响 css 不透明度

javascript - getusermedia DevicesNotFoundError 在最新的浏览器中抛出

html - 链接在 chrome 中有效,但在 firefox 中无效

javascript - 在页面加载后加载和执行脚本?