2012-08-30 70 views
0

我正在为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"; 

我的代码工作,但probleme是,我必须等待“时间”同时beeing执行其他JavaScript。我试图使用contentScriptWhen:'开始',但我改变了一件事。

任何想法阻止页面的其他脚本?

回答

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); 

该代码抛出的所有对象插入到文档中的片段,所以你可以擦整个页面了,才追加这一切回来的;不需要图书馆。你的divs喜欢& mavideo也在那里。

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