一个firefox插件怎么能找到带有window.name="mywindow"的标签呢?
How could a Firefox-Addon find the the tab with the window.name="mywindow"?
我运行的是Firefox 30。我打开了一些标签。其中一个是我的local-html文件,我试图在其中设置一个窗口。Id或文件。Id到"myhtmlpage".
...
function init() {
document.name = 'myhtmlpage';
document.id = 'myhtmlpage';
// or window.name ='myhtmlpage';
// window.id = 'myhtmlpage';
}
</script></head>
<body onload="init();">
...
使用以下代码(来自mozilla帮助页面)我可以找到contentDocument,但它根本没有。id或。name属性或属性。
function findTabPerURL(url) {
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator);
var browserEnumerator = wm.getEnumerator("navigator:browser");
// Check each browser instance for our URL
var found = false;
while (!found && browserEnumerator.hasMoreElements()) {
var browserWin = browserEnumerator.getNext();
var tabbrowser = browserWin.gBrowser;
// Check each tab of this browser instance
var numTabs = tabbrowser.browsers.length;
for (var index = 0; index < numTabs; index++) {
var currentBrowser = tabbrowser.getBrowserAtIndex(index);
if (url == currentBrowser.currentURI.spec) {
// The URL is already opened. Select this tab.
tabbrowser.selectedTab = tabbrowser.tabContainer.childNodes[index];
// Focus *this* browser-window
browserWin.focus();
found = true;
return tabbrowser;
break;
}
}
}
}
var tab; tab = findTabPerURL("file:///F:/myfile.html");
var cd = tab.contentDocument;
alert(cd.id); // doesn't exist. I checked the contentDocument with a for (var each in cd) loop.
使用这个contentDocument (cd)我可以操作内容。(比如改变文本区域的值。)这样就可以了
但是我想通过比较id找到正确的文档对象,而不是通过比较URL!我怎么能这么做呢?
这里有一个类似的问题,答案建议在标签上使用linkedBrowser。但选项卡没有这个属性。它会抛出一个错误,并且使用for (var each in tab)检查也不会显示错误。首先,您的代码实际上并没有返回浏览器,而是返回tabbrowser
(即窗口的gBrowser
)。
document.id
不是document
的标准性质。因此,由于它是在另一个安全上下文中定义的,因此您不能立即访问它。这是为了防止一个网站覆盖默认实现,从而使它有可能提供一个附加的假值。
由于您知道该值是网站定义的(因此不会被欺骗而相信假值),因此可以通过访问.wrappedJS
属性来打开document
对象。
修正两者,这里是一些应该工作的代码(尽管我没有测试它):
function findBrowserPerURL(url) {
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator);
var browserEnumerator = wm.getEnumerator("navigator:browser");
// Check each browser instance for our URL
while (browserEnumerator.hasMoreElements()) {
var browserWin = browserEnumerator.getNext();
var tabbrowser = browserWin.gBrowser;
// Check each tab of this browser instance
var numTabs = tabbrowser.browsers.length;
for (var index = 0; index < numTabs; index++) {
var currentBrowser = tabbrowser.getBrowserAtIndex(index);
if (url == currentBrowser.currentURI.spec) {
// The URL is already opened. Select this tab.
tabbrowser.selectedTab = tabbrowser.tabContainer.childNodes[index];
// Focus *this* browser-window
browserWin.focus();
return currentBrowser;
}
}
}
return null;
}
var browser = findBrowserPerURL("file:///F:/myfile.html");
if (browser) {
alert(browser.contentDocument.wrappedJSObject.id + " " + browser.contentDocument.wrappedJSObject.name);
}
相关文章:
- 铬:“;未捕获的语法错误:意外的标记:"
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 使用“+="操作人员
- //而不是在src=“”上使用http://"属性
- "未捕获的语法错误:意外的标记}"
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- "实例范围”;TypeScript类的getter/setter
- Javascript复选框函数:;缺少:在属性id之后"
- "“;变量未引用正确的对象
- "日期“;AJAX请求返回的类型值未定义
- 得到"TypeError:无法读取属性'filename'未定义的“;调用“npm start
- Soundcloud api"未捕获的类型错误:无法读取属性'uri'“未定义”;
- "工具提示"jQuery插件坏了
- "锻造;React中的表达式
- 图像可以从源<img src=""/>.TEXT可以在没有javascript的情况下从外部
- 如何提取“;href"最近列表项中的属性值
- CKEditor如何允许href="javascript:void(0)"在小部件中
- 插入“;img src"在javascript中