我正在創建一個Chrome擴展,並且迄今已取得成功。作爲最後一項功能,當用戶點擊我的分機面板中的關於該部分時,我正嘗試附加一個div(顯示關於我的個人網站的小型非刺激性廣告)到當前打開的標籤頁的正文。我也得到了它的工作。鉻擴展 - 將div附加到不與Facebook一起工作的按鈕
但問題是,如果該頁面包含Facebook like或twitter follow widget,則此div不會附加到主頁面的主體標記。相反,它會附加到上述小部件的iframe中的body標籤。
當我檢查這些頁面的dom結構時,這些小部件在iframe中創建自己的html> body結構。這就是導致這個問題的原因。
我想這個div安裝到第一機身部件如下:
var mainbody = document.getElementsByTagName('body');
mainbody[0].appendChild(adDiv); --> adDiv = new element I created above this code with its own properties
通過上面的第二個說法,我希望它得到重視的第一個標籤,而不是到內標籤。
不幸的是,這也不起作用。我可以看到它連接到facebook/twitter部件而不是主部件。我在做什麼有什麼不對?
編輯
從@斯坦的評論我能夠修復與Facebook/Twitter的控件頁面的問題(即那些藉助iframe)。現在我的代碼如下所示:
document.body.appendChild(adDiv);
- 謝謝Stan。
但現在我正面臨另一個問題。在某些網站(如http://www.glassdoor.com/index.htm)div未出現在頁面中。實際上發生的事情是,div被附着到身體上,但同時它也被移除。只有在html檢查員的幫助下才能看到(在這種情況下,chrome的檢查員)。
div(adDiv)在標記中附着到body並消失。 就好像它無法將自己綁定到身體。結果:沒有任何內容出現在頁面中。
任何想法爲什麼會發生這種情況?它只發生在如上所述的少數網站中。
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);
}
}
您需要提供一些無法正常工作的網站示例,因爲我無法重現它。我試過[this](http://www.huffingtonpost.com/2012/10/30/hurricane-sandy-storm_n_2042815.html)和[this](http://twitter.github.com/bootstrap/)但沒有運氣。在每一頁上只找到一個'
'。我也試着等待頁面完全加載(這樣我確信所有的社交小部件都已加載),但我仍然從document.getElementsByTagName('body')'中得到''。 –你可以嘗試'document.body.appendChild'? – Stan
@斯坦那伎倆。謝謝! 但在某些網站(如http://www.glassdoor.com/index.htm),我可以看到div被連接並在同一瞬間被刪除。我注意到這使用鉻的HTML檢查器。我可以看到div在標記中附着到身體上,但同時被刪除。結果:沒有任何內容出現在頁面中。任何想法爲什麼? – Ivin