我想创建一个简单的插件来编辑某个页面上的iframe。
我看了the MDN add-on SDK tutorial,发现了一个tutorial,它解释了如何与页面进行交互,这里是 index.js :
var pageMod = require("sdk/page-mod");
pageMod.PageMod({
include: "http://www.kongregate.com/games/tfender/contract-wars",
contentScriptFile: "./main.js"
});
这是 data / main.js ,contentScriptFile:
window.__cw_fullscreen_started = false;
if (!__cw_fullscreen_started) {
console.log('started!');
__cw_fullscreen_started = true;
}
最后一个教程有一个示例,展示如何使用pageMod,这里是:
var pageMod = require("sdk/page-mod");
pageMod.PageMod({
include: "*.org",
contentScript: 'document.body.innerHTML = ' +
' "<h1>Page matches ruleset</h1>";'
});
这里的一切都很清楚:当我打开一些 .org 网站时,该脚本会用 <h1>Page matches ruleset</h1>
替换页面内容。似乎 document.body 链接到属于执行脚本的页面的文档正文。
但是当我执行jpm run
并访问 http://www.kongregate.com/games/tfender/contract-wars 时,应该执行 main.js 脚本的页面,我看到了'start!'已多次登录。
我再次浏览MDN的所有教程,但我不知道为什么会这样。
所以问题:为什么脚本被执行了很多次?
PS:在similar question的回答中,一个人说“内容脚本将为从example.com加载的每个HTML文档只运行一次”,并说记录location.href将清除混乱,但是对我来说console.log(location.href, window.self == window.top)
多次登出“www.example.com false”,所以混淆不清楚。