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

私のコードは機能しますが、問題は、他のJavaScriptが実行されている間「何時間も」待たなければならないことです。contentScriptWhen:'start'を使用しようとしましたが、変更しません。

ページの他のスクリプトをブロックするアイデアはありますか?

4

1 に答える 1

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 と mavideo もそこにあります。

このコードのすべてを実際にテストしたわけではないので、期待どおりに動作することを願っています。

于 2012-10-02T00:29:07.473 に答える