从 firefox add-on 访问自定义 dom 功能
access custom dom function from firefox add-on
我正在使用最新的 SDK 开发 Firefox Add。我遇到的问题是,每当我尝试 运行 自定义 dom 函数时,它都不起作用。
场景:
firefox add-on 必须能够遍历所有选项卡,如果根据标题打开正确的选项卡,运行 一个特定的功能,例如:mydom.checkIt();
<!DOCTYPE html>
<html>
<head>
<title>My Web</title>
</head>
<body>
<script>
mydom = {};
mydom.checkIt = function (){
alert('Hi');
};
</script>
</body>
</html>
那么 add-on 源代码将类似于:
var tabs = require('sdk/tabs');
for (let tab of tabs)
{
if(tab.title=='My Web')
{
tab.activate();
}
}
tabs.on('activate', function(tab) {
tab.attach({
contentScript: "if(typeof(mydom)!=='undefined')mydom.checkIt();else console.log('no defined');"
});
});
但这不起作用,它总是说:"no defined"
有什么想法吗?
您必须使用 unsafeWindow 或 wrappedJSObject 进入 dom js 范围。所以 contentWindow.wrappedJSOBject.checkIt() 来自 bootstrap 插件(不确定 sdk)
警告,这可能对 e10s 不友好,我们应该找到一种方法来支持它
我正在使用最新的 SDK 开发 Firefox Add。我遇到的问题是,每当我尝试 运行 自定义 dom 函数时,它都不起作用。
场景: firefox add-on 必须能够遍历所有选项卡,如果根据标题打开正确的选项卡,运行 一个特定的功能,例如:mydom.checkIt();
<!DOCTYPE html>
<html>
<head>
<title>My Web</title>
</head>
<body>
<script>
mydom = {};
mydom.checkIt = function (){
alert('Hi');
};
</script>
</body>
</html>
那么 add-on 源代码将类似于:
var tabs = require('sdk/tabs');
for (let tab of tabs)
{
if(tab.title=='My Web')
{
tab.activate();
}
}
tabs.on('activate', function(tab) {
tab.attach({
contentScript: "if(typeof(mydom)!=='undefined')mydom.checkIt();else console.log('no defined');"
});
});
但这不起作用,它总是说:"no defined"
有什么想法吗?
您必须使用 unsafeWindow 或 wrappedJSObject 进入 dom js 范围。所以 contentWindow.wrappedJSOBject.checkIt() 来自 bootstrap 插件(不确定 sdk)
警告,这可能对 e10s 不友好,我们应该找到一种方法来支持它