是否可以在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
}
}
}
答案 0 :(得分:1)
nsIDOMWindow
(+各种相关接口,如docshell)是w3c规范中常规window
对象的XPCOM表示。并且由于窗口对象可以嵌套(例如通过iframe),因此可以是nsIDOMWindows。当您访问浏览器窗口时,您通常会访问代表浏览器镶边的外部窗口,而不是内容。
原则上,您可以直接从其<browser>
XUL元素访问标签的内容窗口,但要与e10向前兼容,您应该使用framescripts。