2016-09-23 18 views
0

私はのウェブサイトからnode.removeChildを使用してすべてのリンク要素のrelタグを "stylesheet"で削除しようとしていますが、機能しません。 セキュリティ上の理由からクロムエクステンションにいくつかの制限があることは知っていますが、この問題がこれらの制限によって引き起こされているかどうかはわかりません。removeChildがクロム拡張子で動作していません

ログに「styles[i].parentElement」と入力すると、ボディエレメントが正しく機能するようになります。

ご協力いただければ幸いです。

manifest.jsonを:

{ 
"manifest_version": 2, 
"name": "Leho Styler", 
"description": "This extension gives leho a whole new styling to better please the eye.", 
"version": "0.1.0", 
"content_scripts": [ 
    { 
    "matches": [ 
     "https://leho.howest.be/*", 
     "https://leho.howest.be/*/*", 
     "http://leho.howest.be/*", 
     "http://leho.howest.be/*/*" 
    ], 
    "css": [ 
     "reset.css", 
     "leho.css" 
    ], 
    "js": ["leho.js"] 
    } 
] 

}

leho.js(コンテンツスクリプト)

var styles = document.getElementsByTagName('link'); 

function init() { 
    for (var i = 0; i < styles.length; i++) { 
     if (styles[i].rel == "stylesheet") { 
      styles[i].parentElement.removeChild(styles[i]); 
     } 
    } 
} 

init(); 

答えて

0

まず、var styles = document.querySelectorAll ("link[rel='stylesheet']")にクエリを変更する - これは取得不要なifブロックを取り除く。次に、init()が呼び出されたときにDOMがロードされていますか?そのためには、initを直接呼び出すのではなく、次の行を追加してみてください:document.addEventListener ("DOMContentLoaded", init); - これはDOMが利用可能になるとinitを呼び出します。私が知る限り、これはマニフェストファイル内で行うこともできますが、デフォルトが何であるか分かりません。

+0

私はそれを考えなかったので、querySelectorAllを使用することを指摘してくれてありがとう。また、私はDOMContentLoadedでinitを実行しようとしましたが、それは問題を解決しませんでした。それを解決したのは、あなたが提案したマニフェストの "run_at": "document_end"を使用しています。 Googleによると_ _ "document_end"の場合、ファイルはDOMが完成した直後ではなく、画像やフレームなどのサブリソースが読み込まれる前に挿入されます。 "_ [Chromeコンテンツスクリプトリファレンス](https:// developer。 chrome.com/extensions/content_scripts)これですべてが意図どおりに機能します。助けてくれてありがとう@NikxDa! –

関連する問題