我正在尝试创建一个加载项,从当前网页的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);
任何帮助都将不胜感激。
答案 0 :(得分:1)
如果没有更多信息,有必要猜测您的问题是什么。最可能的问题是您尝试在错误的city
中找到ID = document
的文本框元素。
Firefox附加组件通常在未定义全局window
对象的范围内运行(如果已定义,则取决于当前运行的代码部分是如何输入的)。即使已定义,也通常不会将其定义为您期望的window
(当前选项卡的window
)。您可能需要获取最近访问的窗口/选项卡的window
对象的引用。
如果存在浏览器窗口(在某些情况下,您可以在没有浏览器窗口的情况下运行,例如在启动时),您可以获得对最新浏览器window
的引用,{{1 }和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
对象,或者引用了除您期望之外的其他内容,这是许多人在编写Firefox附加组件时遇到的问题。
注意:如果您希望与multi-process Firefox(电解或e10s)本机兼容,那么获取对当前文档内容的访问权限会更复杂。有一些垫片可以使你的代码继续使用多进程Firefox一段时间,但它们可能最终消失。
参考文献:
nsIWindowMediator
大部分内容都是从我之前的答案中复制过来的,包括this link。