获取选项卡的 nsIDOMWindow 以进行文本输入
Get nsIDOMWindow of a Tab to do Text Input
是否可以在 Firefox 的特定选项卡上使用文本输入处理器 window?
是否所有选项卡都共享同一个 nsIDOMWindow 对象?如果是,还有其他解决办法吗?
重新表述我的问题:我想在特定选项卡中输入文本,如果有多个选项卡,则可能不是当前选项卡。
下面是在任何 Firefox window 上编写文本的示例代码,但仅适用于当前选项卡:
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
(+各种相关接口,如 docshell)是 w3c 规范中常规 window
对象的 XPCOM 表示。由于 window 对象可以嵌套(例如通过 iframe),因此 nsIDOMWindows 也可以。当您访问浏览器 windows 时,您通常访问的是代表浏览器 chrome 的外部 windows,而不是内容。
原则上,您可以直接从其 <browser>
XUL 元素访问选项卡的内容 window,但要与 e10s 向前兼容,您应该改用 framescripts。
是否可以在 Firefox 的特定选项卡上使用文本输入处理器 window?
是否所有选项卡都共享同一个 nsIDOMWindow 对象?如果是,还有其他解决办法吗?
重新表述我的问题:我想在特定选项卡中输入文本,如果有多个选项卡,则可能不是当前选项卡。
下面是在任何 Firefox window 上编写文本的示例代码,但仅适用于当前选项卡:
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
(+各种相关接口,如 docshell)是 w3c 规范中常规 window
对象的 XPCOM 表示。由于 window 对象可以嵌套(例如通过 iframe),因此 nsIDOMWindows 也可以。当您访问浏览器 windows 时,您通常访问的是代表浏览器 chrome 的外部 windows,而不是内容。
原则上,您可以直接从其 <browser>
XUL 元素访问选项卡的内容 window,但要与 e10s 向前兼容,您应该改用 framescripts。