阻止现有脚本

时间:2012-08-30 16:09:58

标签: javascript firefox-addon firefox-addon-sdk

我正在为firefox制作一个插件。我想从HTML页面中提取视频并将其显示在黑色背景上。这就是我所拥有的。

//main.js
var pageMod = require("page-mod");

pageMod.add(new pageMod.PageMod({
  include: "http://myserver.fr/*",
  contentStyleFile: data.url("modify.css"),
  contentScriptFile: data.url('hack.js'),
  contentScriptWhen: 'start'
}));
//hack.js
video = document.body.innerHTML;
document.body.innerHTML = '';
video = video.substring(video.lastIndexOf("<object"),video.lastIndexOf("</object>"));
video = "<div id='fond'></div><div id='mavideo'>"+video+"</div>"

document.body.innerHTML = video;
document.body.style.backgroundColor = "black";
document.body.style.margin = "0";

我的代码有效,但问题是我必须等待“好几个小时”而另一个javascript正在执行。我尝试过使用contentScript:'start'但是我想改变一件事。

是否有想要阻止页面的其他脚本?

1 个答案:

答案 0 :(得分:1)

阻止加载脚本会有点困难,我们可以快速删除它们。

// remove all scripts
var scripts = document.getElementsByTagName("script");
var parent = null;
for (var i = 0; i < scripts.length; i += 1) {
    parent = scripts.item(i).parentNode;
    parent.removeChild(scripts.item(i));
}

此代码尝试从页面中删除所有脚本标记,这将停止加载任何脚本并允许您运行其余代码。将它放在hack.js脚本的顶部。

我不知道您正在查看的页面,因此很难知道还有什么其他内容,但您使用substringlastIndexOf的速度不会很快所有。我们可以摆脱这些,看看你是否有任何明显的速度提升。

尝试使用查询选择器和文档片段。这是一个例子:

//hack.js
var fragment = document.createDocumentFragment();
var objects = document.getElementsByTagName("object");
// create your div objects and append to the fragment
var fond = document.createElement("div");
fond.setAttribute("id", "fond");
fragment.appendChild(fond);
var mavideo = document.createElement("div");
mavideo.setAttribute("id", "mavideo");
fragment.appendChild(mavideo);
// append all <object> tags to your video div
for (var i = 0; i < objects.length; i += 1) {
    mavideo.appendChild(objects.item(i));
}
// clear and append it all in
document.body.innerHTML = '';
document.body.appendChild(fragment);

该代码将所有对象抛出到文档片段中,这样您就可以擦除整个页面,然后将其全部追加;不需要图书馆。你的div喜欢&amp; mavideo也在那里。

我没有真正测试所有这些代码,所以希望它按预期工作。