2012-08-30 69 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也在那裏。

我沒有真正地測試所有這些代碼,所以希望它按預期工作。