我正在为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'但是我想改变一件事。
是否有想要阻止页面的其他脚本?
答案 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
脚本的顶部。
我不知道您正在查看的页面,因此很难知道还有什么其他内容,但您使用substring
和lastIndexOf
的速度不会很快所有。我们可以摆脱这些,看看你是否有任何明显的速度提升。
尝试使用查询选择器和文档片段。这是一个例子:
//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也在那里。
我没有真正测试所有这些代码,所以希望它按预期工作。