2016-10-08 8 views
0

Greasemonkeyを使用して<html>のコンテンツを書き直したいと思います。書き換え<html>内容

私はこれを試してみました:

document.open() 
document.write(html) 
document.close() 

は働いていません。

document.body.innerHTML = htmlのみがコンテンツを置き換えます。

いくつかの提案がありますか?

答えて

2

document.write()を使用しないでください。それはすべての種類のセキュリティ制限を持っています(悪人による悪用のため)fraught with pitfallsです。

あなたの質問のように、それをユーザスクリプトで使用しようとすると、 Firefoxは通常、ページを完全に停止させるか、スクリプトがいつ起動するか、を使用するかどうかに応じて、Connecting...に入り、その後リロードサイクルに入ります。
この種のコードはまだChromeで動作していますが、残念ながら残念です。他のブラウザについてはわかりません。

正しい方法は、DOMメソッドを使用することです。たとえば:

var D  = document; 
var newDoc = D.implementation.createHTMLDocument ("My new page title"); 
window.content = newDoc; 

D.replaceChild (
    D.importNode (newDoc.documentElement, true), 
    D.documentElement 
); 

D.body.innerHTML = '<h1>Standby...</h1>'; 

性能を向上させるために、あなたも使用したい場合があります。その後、

// @run-at  document-start 
// @grant  unsafeWindow 

とuserscriptコードの先頭にunsafeWindow.stop();を置きます。




再:"How do I rewrite the head content with this solution?"

この例では、既に<head>を書き換えます。新しい頭部は:

<head><title>My new page title</title></head> 

この場合になります。

のようなDOMコードを使用して、追加のヘッド要素を追加するには:ちょうど簡単<style>ノードを作成するためにGM_addStyle()を使用

  1. :除き

    var newNode  = D.createElement ('base'); 
    newNode.href = "http://www.example.com/dir1/page.html"; 
    var targ  = D.getElementsByTagName ('head')[0]; 
    targ.appendChild (newNode); 
    

  2. <script>ノードを追加することは、シナリオではほとんど常に無意味です。あなたのuserscriptに必要なJS処理をさせてください。
  3. <meta>のようなタグは追加されますが、処理されません(特にFirefoxの場合)。パラメータによっては、サーバからの初期ロード時にのみ解析されます。
+0

このソリューションでヘッドコンテンツを書き直すにはどうすればよいですか? – mykiwi

+0

@mykiwiコードを実行するだけです。あなたが望むHTMLは 'D.body 'にあります。innerHTML = '

スタンバイ...

'; ' –

+0

@mykiwi、更新された回答を参照してください。 –

関連する問題