我正在创建一个 chrome 扩展,到目前为止我已经成功了。作为最后一个功能,当用户单击我的扩展程序面板中的“关于”部分时,我正在尝试将一个 div(显示关于我的个人网站的小型、无刺激性的广告)附加到当前打开的选项卡/页面的正文。我也让它工作了。
但问题是,如果该页面包含 facebook like 或 twitter follow 小部件,则此 div 不会附加到主页的主体标签。相反,它会附加到上述小部件的 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
通过上面的第二条语句,我期望它附加到第一个标签而不是内部标签。
不幸的是,这也不起作用。我可以看到它连接到 facebook/twitter 小部件而不是 main 。我在做什么有什么问题吗?
编辑
从@stan 的评论中,我能够使用 facebook/twitter 小部件(即带有 iframe 的页面)解决问题。现在我的代码如下所示:
document.body.appendChild(adDiv);
——谢谢斯坦。
但现在我面临另一个问题。在某些网站(如http://www.glassdoor.com/index.htm)页面中没有出现 div。实际发生的是,div 正在连接到身体,但同时它也被移除。只能在 html 检查器(在这种情况下为 chrome 的检查器)的帮助下才能看到。
div(adDiv) 在标记中附加到正文并消失。仿佛无法将自己束缚在身体上。结果:页面中没有出现任何内容。
知道为什么会这样吗?它只发生在像上面所说的那样的少数网站上。
背景.js
chrome.browserAction.onClicked.addListener(function(tab){
chrome.tabs.sendMessage(tab.id,{clicked:1});
});
内容.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);
}
}