gpt4 book ai didi

javascript - Firefox-Addon 如何找到 window.name ="mywindow"的选项卡?

转载 作者:行者123 更新时间:2023-12-02 17:14:19 37 4
gpt4 key购买 nike

我正在运行 Firefox 30。我打开了一些选项卡。其中一个是我的 local-html 文件,我在其中尝试将 window.id 或 document.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 every in tab) 检查不会显示它要么。)

最佳答案

首先,您的代码实际上并不返回浏览器,而是返回 tabbrowser (即窗口的 gBrowser)。

document.id 不是 document 的标准属性。因此,由于它是在另一个安全上下文中定义的,因此您无法立即访问它。这是为了防止网站覆盖默认实现,从而可以提供附加假值。

由于您知道该值是网站定义的(因此不会被欺骗而相信虚假值),因此可以 unwrap the document object通过访问 .wrappedJS 属性。

纠正这两个问题,这里有一些应该可以工作的代码(尽管我没有测试它):

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);
}

关于javascript - Firefox-Addon 如何找到 window.name ="mywindow"的选项卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24573203/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com