2012-05-03 5 views
0

タイトルがあいまいである場合は申し訳ありませんが、説明するのが最も簡単な質問ではありません。現在のところ、XmlHttpRequest.prototype.open = function(){return oldOpen(...)}のようにブラウザに組み込み関数をラップ/オーバーロードして、ページ内のスクリプトが実行される前に実行したい場合は、前に実行するブラウザ拡張機能/アドオンを使用する必要がありますドキュメントが解析され始めます。つまり、ブラウザの拡張機能では、インストールに同意するユーザーのコンバージョン率が低いことがよくあります。私は同じことをするためにブックマークレットを使用できるようになりたいです(とPinterestは、ブックマークレットはそれらの障壁ではないことを示しています!)。しかし、残念なことに、ブックマークレットは、ドキュメントが読み込まれた後、長い間実行されます。プリロードコードの注入を模倣するようにページを "リロード"するJSライブラリ?

私がやりたいこと、理論的には考えていることは、ページをリロードすることですが、スクリプトはすでに挿入されています。プロセスは次のようになります。

  1. window.locationからXHRを介してダウンロードしてください。
  2. すべてのスクリプトタグを含め、DOMからすべての要素を削除します。たぶん良いユーザーエクスペリエンスのための素敵なスプラッシュ画面を投げるかもしれません。
  3. すべてのタイムアウトと間隔をクリアします(FFとChromeではIDが1からカウントアップするように見えるため、AFAIKは事前知識が必要ありません)。
  4. 空のドキュメントにはないwindowdocumentのすべてのキーを削除/未定義...拡張機能がインストールされている可能性があるため、実際に参照用の空白ドキュメントを取得するにはiframeトリッキー/メッセージングが必要になることがあります。
  5. 空白のドキュメントにスクリプトを注入します。
  6. スクリプトを含む元のXHRオリジナルドキュメントのすべてのタグを再挿入し、新しいコンテキストで再読み込みして再実行する必要があります。
  7. スプラッシュ画面をタップすると、行こうとしています!

今、私は完全にこれを盗んでオープンソースにしたいと思っていますが、これまでに誰かがこのようなことを試みましたか?それはたくさんの仕事になるでしょう。私たちが今使っているものがスティックの四角い玉に相当するものでなければ、私はむしろホイールを再発明しません。

+1

iframeでこれを実装できると感じました。 – Hello71

+0

参考までに、これはプロジェクトです:https://github.com/bpartridge/angryponies – btown

答えて

1

または、適切なjs shimを使用して現在のURLを新しいウィンドウに書き換えます。

(function() { 

var scriptSrc = 'http://example.com/shim.js'; 
var rq = new XMLHttpRequest; rq.open('get', '', false); 
rq.send(); 
var text = rq.responseText.replace('<head', '<script src="' + scriptSrc + '"></script><head'); 
var win = window.open(); 
win.document.open(); 
win.document.write(text); 
win.document.close(); 

})(); 
+0

うわー、私はこれがうまくいくとは思ってませんでした!私は新しいページの起源が "about:blank"となることを期待しています。つまり、クロスドメイン要求は機能しませんが、Chrome(EDIT:Firefox)は元のページの原点に設定しています。 – btown

+0

また、これは誰かがこれを見つけた場合に、iframeで動作します。 iframeのサイズをページ全体に合わせると、ページが読み込まれたばかりのように見えますが、シムで表示されます。 – btown

関連する問題