2016-09-09 7 views
0

私はLinkedinにhtmlを挿入するクロム拡張を開発しています。私がJsファイルから$(document.body).append($("<div>"));を実行すると、ページにあるIframeコンポーネントも追加されます。コンソールに$(document.body)と入力すると、本体のみが返されます。 jsファイルから本体のみに制限するにはどうすればよいですか?document.body iframe bodyを返す

私のマニフェストファイル:

{ 
    "manifest_version":2, 
    "name": "Hawk! Beta", 
    "description": "Hawk", 
    "version": "1.0", 
    "permissions": [ 
     "activeTab", 
     "tabs", 
     "storage", 
     "https://ajax.googleapis.com/", 
     "https://*.ngrok.io/" 
    ], 
    "icons": { 
     "16": "img/icon.png", 
     "48": "img/icon.png", 
     "128": "img/icon.png" 
    }, 
    "browser_action": { 
     "default_icon": {      
      "19": "img/icon.png",   
      "38": "img/icon.png"   
     } 
    }, 
    "background": { 
     "scripts": [ 
      "js/lib/jquery.min.js", 
      "js/lib/asteroid/ddp.js", 
      "js/lib/asteroid/q/q.js", 
      "js/lib/asteroid/asteroid/dist/asteroid.chrome.js", 
      "js/lib/asteroid/asteroid/dist/plugins/facebook-login.js", 
      "js/lib/asteroid/asteroid/dist/plugins/google-login.js", 
      "js/lib/asteroid/asteroid/dist/plugins/github-login.js", 
      "js/lib/bootstrap.min.js", 
      "js/background.js" 
     ] 
    }, 
    "content_scripts": [ 
     { 
      "matches": [ 
      "https://www.linkedin.com/*" 
      ], 
      "all_frames" : true, 
      "match_about_blank": true, 
      "js": [ 
      "js/lib/jquery.min.js", 
      "js/lib/handlebars.js", 
      "js/content_scripts/getPagesSource.js" 
      ], 
      "css":[ 
      "css/custom.css" 
      ] 
     } 
    ], 
    "web_accessible_resources": [ 
     "img/*", 
     "js/*", 
     "js/lib/*", 
     "css/custom.css", 
     "html/*" 
    ] 
} 

私はhtmlの

function injectHtml(){ 
    console.log(document.body); //this returns 2 bodies 
    $(document.body).append($("<div>", { 
     "class": "myapp-container" 
    })); 
} 

を注入するために使用されるコード私は本体のみにしていないのiframe体内に注入します。

+0

だけでなく、あなたがIFRAMEやコンテンツよりを選択する必要があります。 – epascarello

+1

あなたのスクリプトのようなサウンドは、トップレベルのページと同様にiframeに注入されています。あなたのマニフェスト設定は何ですか、注入できる場所を制限しましたか? –

+1

* manifest.json *ファイルやコンテンツスクリプトをページに挿入するために使用しているコードを含めて質問を編集してください。この情報はあなたの質問に答えるために必要です。この情報がなければ、デバッグの質問に必要な[mcve]は提供していません。 [mcve]のポイントは問題を複製することができるためです(つまり、問題/解決策が何であるかを推測するのに十分な情報があるためです)。あなたの* manifest.json *を追加したとき、あなたのコンテンツスクリプトをどのように注入しているのか、コメントに残してください(コメントに '@ Makyen'を含めてください)。 – Makyen

答えて

1

PatrickとwOxxOmの提案によれば、マニフェストファイルのcontent_scriptsを以下のように編集しました。

"content_scripts": [ 
    { 
     "matches": [ 
     "https://www.linkedin.com/*" 
     ], 
     "all_frames" : false, //this had to be changed 
     "match_about_blank": true, 
     "js": [ 
     "js/lib/jquery.min.js", 
     "js/lib/handlebars.js", 
     "js/content_scripts/getPagesSource.js" 
     ], 
     "css":[ 
     "css/custom.css" 
     ] 
    } 
] 

これで正常に動作します。みんなありがとう。

編集: all_frames:コンテンツスクリプトが一致 ページ、または唯一のトップフレームのすべてのフレームで実行するかどうか

を制御します。我々が持っているより多くの場合

this link to know more

+0

この変更がなぜ有効になったのかという説明を少し追加すると、これはより良い答えになります。説明に加えて、["content_scripts": "all_frames"](https://developer.chrome.com/extensions/content_scripts#all_frames)にもリンクすることをお勧めします。 – Makyen

関連する問題