如何在带有 iframe 的页面中仅附加到主体标签?

Posted

技术标签:

【中文标题】如何在带有 iframe 的页面中仅附加到主体标签?【英文标题】:How to append to just the main body tag, in a page with iframes? 【发布时间】:2015-11-25 23:23:01 【问题描述】:

我正在开发一个 Greasemonkey 脚本来在 body 标记之后添加一个 div,这里是 jQuery:

$("body:first").append (
  '<div id="btn" style="width:50px;display:block">SHOW</div>  <div id="gmPopupContainer" style="display:none">my text here</div>'
);

只要页面上只有一个body标签就可以正常工作,但是当网页上有iframe时就会出现问题。它附加到嵌套在 iframe 中的所有正文。

我尝试了许多 jQuery 选择器,但都没有成功。这样做的正确方法是什么?

【问题讨论】:

【参考方案1】:

一般情况下,在元数据块中使用@noframesDoc来阻止脚本在 iframe 中运行。

或者,在这种情况下,您也可以使用类似:

var topmostFramesMainBody = $(top.document.body).first ();

如果这不起作用,提供My very simple Greasemonkey script is not running? 中指定的详细信息。 (请注意,您应该始终提供这些详细信息。)

【讨论】:

【参考方案2】:

你可以$("&lt;div id="btn" ...&gt;SHOW&lt;/div&gt;").insertAfter('body');

【讨论】:

它也不起作用,因为它会插入在网页上找到的所有正文标签之后,包括 iframe 中的标签,我什至尝试过 $('document.body').我需要参考主文档的正文并丢弃所有其余部分 好的,给你的主体一个ID:&lt;body id="mainBody"&gt;...&lt;/body&gt;然后做$("&lt;div id="btn" ...&gt;SHOW&lt;/div&gt;").insertAfter('body.mainBody'); 我不能给 body 一个 id 因为我正在写一个跨站点的greasemonkey 脚本所以我不控制网页。

以上是关于如何在带有 iframe 的页面中仅附加到主体标签?的主要内容,如果未能解决你的问题,请参考以下文章

浅谈iframe与ajax

将 html 内容附加到 Angular JS 中的 iframe

iframe中操作主体页面的元素,方法

更好的替代 iframe 来显示标签内容?

将事件处理程序附加到在IFrame中呈现的HTML

iframe标签嵌套页面时,如何让页面内的高度自适应