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

前端之家收集整理的这篇文章主要介绍了html – FireFox附加组件:从当前选项卡中的文本框中检索文本不会产生任何结果前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试创建一个加载项,从当前网页的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

其中很大一部分是从我之前的答案中复制过来的,包括this link.

猜你在找的HTML相关文章