我正在尝试创建一个加载项,从当前网页的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);
任何帮助,将不胜感激.
解决方法
没有更多信息,有必要猜测你的问题是什么.最可能的问题是您试图在错误的文档中找到ID = city的文本框元素.
Firefox附加组件通常在未定义全局窗口对象的作用域中运行(如果已定义,则取决于输入当前正在运行的代码部分的方式).即使已定义,也通常不会将其定义为您期望的窗口(当前选项卡的窗口).您可能需要获取最近访问的窗口/选项卡的窗口对象的引用.
如果存在浏览器窗口(在某些情况下,您可以在没有浏览器窗口的情况下运行,例如在启动时),您可以获得对最新浏览器窗口,文档和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; }
如果您正在运行代码以响应事件(例如按钮命令事件),则可以使用以下命令获取当前窗口:
var window = event.view
缺少可用的全局窗口对象,或者让它引用的不是您期望的东西,是许多人在编写Firefox附加组件时遇到的问题.
注意:如果您希望与multi-process Firefox(Electrolysis或e10s)本机兼容,那么获取对当前文档内容的访问权限会更复杂.有垫片可以让你的代码继续使用多进程Firefox一段时间,但它们可能/最终会消失.
参考文献:
> nsIWindowMediator
> Working with windows in chrome code
> SDK:window/utils
> SDK:windows