【发布时间】:2012-10-18 03:28:46
【问题描述】:
我正在创建一个 chrome 扩展程序,到目前为止我已经成功了。作为最后一个功能,当用户单击我的扩展程序面板中的“关于”部分时,我正在尝试将一个 div(显示关于我的个人网站的小型、无刺激性的广告)附加到当前打开的选项卡/页面的正文中。我也让它工作了。
但问题是,如果该页面包含 facebook like 或 twitter follow 小部件,则此 div 不会附加到主页的 body 标记。相反,它会附加到上述小部件的 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) 在标记中附加到正文并消失。 它好像无法将自己与身体绑定。结果:页面中没有出现任何内容。
知道为什么会这样吗?它只发生在像上述那样的少数网站。
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);
}
}
【问题讨论】:
-
你可以试试
document.body.appendChild? -
@Stan 成功了。谢谢!但是在某些站点(例如glassdoor.com/index.htm)中,我可以看到 div 被附加并在同一时刻被删除。我使用 chrome 的 html 检查器注意到了这一点。我可以看到 div 在标记中附加到正文,但同时它被删除了。结果:页面中没有出现任何内容。知道为什么吗?
-
如果这仅发生在特定网站上(并且适用于所有其他网站),我认为您应该分析他们的 javascripts。或许,如果您将您的孩子推迟到网站脚本完成工作的那一刻,您可能会成功。如果脚本确实监视 DOM 更改,您应该以某种方式阻止它们进入您的扩展程序,但这当然会破坏网站的正常行为。
-
但是我们扩展的 JS 代码不是在完全隔离的环境中工作吗?如果是这样,我该如何阻止或处理站点的JS?
标签: javascript google-chrome dom google-chrome-extension