是否可以在 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/