0

如何将任何页面(例如http://google.com/ )替换为我的页面(我不想重定向),包括<head>

我试过这个:

// Import the page-mod API
var pageMod = require("sdk/page-mod");

// Create a page-mod
// It will run a script whenever a ".io" URL is loaded
// The script replaces the page contents with a message
pageMod.PageMod({
  include: "*.io",
  contentScript: 'document.body.innerHTML = ' +
                 ' "<h1>Page matches ruleset</h1>";'
});

但这并不能取代整个页面。我也想换head。我想在页面加载之前替换页面...

4

1 回答 1

1

使用document.head.innerHTML您可以参考html页面的标题,允许在其中设置内容。

另外值得注意的是,page-mod API 可以将多个参数作为字符串文字数组,并且能够从数据目录导入脚本。

最后,您可以通过将page-mod 选项 设置为orcontentScriptWhen的值,将脚本设置为在页面加载之前运行。startready

根据文档:

“start”:在文档元素插入 DOM 之后,但在 DOM 内容本身加载之前立即加载内容脚本

“ready”:加载 DOM 内容后加载内容脚本,对应 DOMContentLoaded 事件

“end”:加载所有内容(DOM、JS、CSS、图像)后,在 window.onload 事件触发时加载内容脚本

因此,在页面加载之前更改标题和正文的示例将类似于以下内容:

// Import the page-mod API
var pageMod = require("sdk/page-mod");

// Create a page-mod
// It will run a script whenever a ".org" URL is loaded
// The script replaces the page contents with a message
pageMod.PageMod({
  include: "*.io",
  contentScript: ['document.body.innerHTML = ' +
                 ' "<h1>foo</h1>"',
                 'document.head.innerHTML = ' + 
                 ' "<style>h1 {color:blue;}</style>";'],
  contentScriptWhen: "start"
});

还值得注意的是,当contentScriptWhen设置为时,此脚本可能对某些页面效果更好ready,否则更改可能不适用于页面上的所有元素。

于 2015-09-07T14:45:16.683 回答