私はクロム拡張機能を作成していますが、これまでのところ成功しています。最後の機能として、ユーザーが拡張機能のパネルの [about] セクションをクリックしたときに、現在開いているタブ/ページの本文に div (私の個人サイトに関する小さな刺激のない広告を表示するもの) を添付しようとしています。私もそれを働かせました。
しかし、問題は、この div がメイン ページの body タグに関連付けられていないことです。そのページに facebook like または twitter フォロー ウィジェットが含まれている場合。代わりに、上記のウィジェットの iframe の body タグに添付されます。
そのようなページの dom 構造を確認したところ、これらのウィジェットは iframe 内に独自の html>body 構造を作成しています。そして、それがこの問題の原因です。
次のように、この div を最初の body 要素にアタッチしようとしました。
var mainbody = document.getElementsByTagName('body');
mainbody[0].appendChild(adDiv); --> adDiv = new element I created above this code with its own properties
上記の 2 番目のステートメントでは、内側のタグではなく、最初のタグに関連付けられることを期待していました。
残念ながら、これも機能していません。main ではなく facebook/twitter ウィジェットに接続されていることがわかります。私がしていることに何か問題がありますか?
編集
@stan のコメントから、facebook/twitter ウィジェット (iframe を含むもの) を含むページの問題を修正できました。今私のコードは次のようになります:
document.body.appendChild(adDiv);
-- ありがとう、スタン。
しかし今、私は別の問題に直面しています。特定のサイト ( http://www.glassdoor.com/index.htmなど) では、ページに div が表示されません。実際に何が起こるかというと、div が body にアタッチされますが、同時に削除されます。これは、html インスペクター (この場合は chrome のインスペクター) の助けを借りてのみ見ることができます。
div(adDiv) は、マークアップの本文に添付されて消えます。まるで、体に自分自身を結合することができないかのようです。結果: ページに何も表示されません。
なぜこれが起こっているのですか?上記のような少数のサイトでのみ発生しています。
background.js
chrome.browserAction.onClicked.addListener(function(tab){
chrome.tabs.sendMessage(tab.id,{clicked:1});
});
content.js
chrome.extension.onMessage.addListener(function(request,sender,sendResponse){
if(request.clicked==1){
/* Create adDiv and apply style to it using JS */
document.body.appendChild(adDiv);
}
}