在注入的 iframe 上添加 HTML

Posted

技术标签:

【中文标题】在注入的 iframe 上添加 HTML【英文标题】:Add HTML on an injected iframe 【发布时间】:2011-07-11 18:07:20 【问题描述】:

我目前正在从 Google Chrome 开发工具栏。基本上它是一个工具栏,我通过使用内容脚本在每个网页中注入。从技术上讲,工具栏是由一个 iframe 实现的,其中包括所有组件,如按钮、dropMenu ......这是您制作的脚本:

// Take down the webPage

document.getElementsByTagName('body')[0].style.marginTop = '39px';

var body = $('body'),
toolbarURL = chrome.extension.getURL("yourtoolbar.html"),
iframe = $('<iframe id="YourToolbarFrame" scrolling="no" src="'+toolbarURL+'">');

// Insertion
body.append(iframe);    

// Effect
$("#YourToolbarFrame").hide().fadeIn(800);

但是现在我正在尝试在这个 iframe 上添加一些组件,例如一个按钮,但它没有工作......

var yt = $("#YourToolbarFrame");
var newButton = $('<a href="javascript:openInstantMessage()"><input type="image" src="images/pop.ico" name="InstantMessage"  ></a>');
yt.append(newButton);

iframe 的主体如下所示:

<body>          
    <div class="default">
         // COMPONENTS
    </div>
</body>      

希望有人能给我一些帮助! :)

【问题讨论】:

【参考方案1】:

您必须等到 iframe 加载完毕。例如:

iframe.load(function()   
    var newButton = ...;  
    $(this).contents().find('body').append(newButton);
).appendTo('body');

不确定 Chrome 如何处理内容脚本的同源策略。

【讨论】:

它不起作用,你说“Chrome 同源策略”是什么意思? @Sindar:在普通网站中,如果内容来自不同的域,您将无法访问 iframe 的内容。但由于内容脚本很特别,它可能是可能的。您收到任何错误消息吗? @Felix Kling:是的,不安全的 JavaScript 尝试从 URL valeriemates.com/professional 的框架访问具有 URL chrome-extension://dkdmapmlfmfkppikamibckkojpofeadp/yourtoolbar.html 的框架。域、协议和端口必须匹配。 jquery.js:16Uncaught TypeError:无法读取未定义的属性“文档” @Sindar:哦,太糟糕了。那我猜是不可能的……不过你为什么不直接把按钮加到yourtoolbar.html呢? @Felix Kling:问题是这个文件“yourtoolbar.html”是基本的工具栏。我需要做的是加载此文件并添加人员功能中的组件。你关注我了吗?【参考方案2】:

由于您使用的是jQuery,您可以尝试使用

$('#YourToolbarFrame').contents().find('body').append(newButton);

或者,如果您不想直接附加到正文,请使用 find() 语句中的任何其他元素。

【讨论】:

以上是关于在注入的 iframe 上添加 HTML的主要内容,如果未能解决你的问题,请参考以下文章

在动态 iframe 中注入表单时 IE 中的混合内容问题

如何在 UIWebView 加载的 iframe 中注入 javascript - iOS

检测动态加载的 iframe

SQL注入哪些工具最有效

Android webView 注入js文件,及交互

使用 JQuery 访问由 chrome 扩展注入的 iframe