FireFox附加组件:从当前选项卡中的文本框中检索文本不会产生任何结果

时间:2015-03-26 16:07:08

标签: html firefox-addon getelementbyid

我正在尝试创建一个加载项,从当前网页的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);

任何帮助都将不胜感激。

1 个答案:

答案 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一段时间,但它们可能最终消失。

参考文献:

  1. nsIWindowMediator
  2. Working with windows in chrome code
  3. SDK:window/utils
  4. SDK:windows
  5. 大部分内容都是从我之前的答案中复制过来的,包括this link