FireFox 附加组件:从当前选项卡的文本框中检索文本没有结果
FireFox Add-on: retrieve text from textbox in current tab gives no result
我正在尝试创建一个加载项,从当前网页的 ID = city
的文本框中获取内容 (textbox.value
),并将其写入文本文件。
无需获取文本框值即可写入文件。但是,如果我更新代码,那么它什么也不会写。下面是我用来获取文本框值的代码。
var cityfromfield = window.content.document.getElementById('city').value;
var date = new Date();
var TimeStamp = date.toLocaleString();
var wstrtotext = TimeStamp + cityfromfield;
fos.write(wstrtotext, wstrtotext.length);
如有任何帮助,我们将不胜感激。
在没有更多信息的情况下,有必要猜测你的问题是什么。最可能的问题是您试图在错误的 document
.
中查找 ID=city
的文本框元素
Firefox 附加组件通常 运行 在未定义全局 window
对象的范围内(是否已定义取决于您的代码部分当前 运行ning 被输入)。即使定义了,也往往没有定义成你期望的window
(当前选项卡的window
)。您可能需要为最近访问的 window/tab 获取对 window
对象的引用。
如果浏览器 window 存在(在某些情况下,您可能 运行ning 而浏览器 window 不存在,例如在启动时),您可以获得一个引用最新的浏览器 window
、document
和 gBrowser
:
if (window === null || typeof window !== "object") {
//If you do not already have a window reference, you need to obtain one:
// Add/remove a "/" to comment/un-comment the code appropriate for your add-on type.
/* Add-on SDK:
var window = require('sdk/window/utils').getMostRecentBrowserWindow();
//*/
//* Overlay and bootstrap (from almost any context/scope):
var window=Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator)
.getMostRecentWindow("navigator:browser");
//*/
}
if (typeof document === "undefined") {
//If there is no document defined, get it
var document = window.content.document;
}
if (typeof gBrowser === "undefined") {
//If there is no gBrowser defined, get it
var gBrowser = window.gBrowser;
}
如果您运行正在编写代码以响应事件(例如按钮 command
事件),您可以通过以下方式获取当前 window
:
var window = event.view
缺少可用的全局 window
对象,或者它引用了您所期望的以外的东西,这是许多人在编写 Firefox 附加组件时遇到的问题。
注意:如果您希望与 multi-process Firefox(Electrolysis,或 e10s)原生兼容,那么访问当前文档的内容会更加复杂。有一些垫片可以让您的代码继续在多进程 Firefox 中工作一段时间,但它们 may/will 最终 消失了。
参考文献:
大部分内容是从我之前的回答中复制的,包括 this link。
我正在尝试创建一个加载项,从当前网页的 ID = city
的文本框中获取内容 (textbox.value
),并将其写入文本文件。
无需获取文本框值即可写入文件。但是,如果我更新代码,那么它什么也不会写。下面是我用来获取文本框值的代码。
var cityfromfield = window.content.document.getElementById('city').value;
var date = new Date();
var TimeStamp = date.toLocaleString();
var wstrtotext = TimeStamp + cityfromfield;
fos.write(wstrtotext, wstrtotext.length);
如有任何帮助,我们将不胜感激。
在没有更多信息的情况下,有必要猜测你的问题是什么。最可能的问题是您试图在错误的 document
.
city
的文本框元素
Firefox 附加组件通常 运行 在未定义全局 window
对象的范围内(是否已定义取决于您的代码部分当前 运行ning 被输入)。即使定义了,也往往没有定义成你期望的window
(当前选项卡的window
)。您可能需要为最近访问的 window/tab 获取对 window
对象的引用。
如果浏览器 window 存在(在某些情况下,您可能 运行ning 而浏览器 window 不存在,例如在启动时),您可以获得一个引用最新的浏览器 window
、document
和 gBrowser
:
if (window === null || typeof window !== "object") {
//If you do not already have a window reference, you need to obtain one:
// Add/remove a "/" to comment/un-comment the code appropriate for your add-on type.
/* Add-on SDK:
var window = require('sdk/window/utils').getMostRecentBrowserWindow();
//*/
//* Overlay and bootstrap (from almost any context/scope):
var window=Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator)
.getMostRecentWindow("navigator:browser");
//*/
}
if (typeof document === "undefined") {
//If there is no document defined, get it
var document = window.content.document;
}
if (typeof gBrowser === "undefined") {
//If there is no gBrowser defined, get it
var gBrowser = window.gBrowser;
}
如果您运行正在编写代码以响应事件(例如按钮 command
事件),您可以通过以下方式获取当前 window
:
var window = event.view
缺少可用的全局 window
对象,或者它引用了您所期望的以外的东西,这是许多人在编写 Firefox 附加组件时遇到的问题。
注意:如果您希望与 multi-process Firefox(Electrolysis,或 e10s)原生兼容,那么访问当前文档的内容会更加复杂。有一些垫片可以让您的代码继续在多进程 Firefox 中工作一段时间,但它们 may/will 最终 消失了。
参考文献:
大部分内容是从我之前的回答中复制的,包括 this link。