如何在Iframe中读取加载的脚本?

时间:2014-10-27 13:16:34

标签: javascript jquery html iframe

如何阅读iframe中加载的脚本?

我想回显iframe之外的变量,并使用iframe中的script.js中的变量。

我的代码:

<script type="text/javascript">
  var myIFrame = document.getElementById(ifr_id);
  var script = myIFrame.contentWindow.document./*script.js*/;
</script>

在Iframe中<head><script type="text/javascript" src="script.js"></script>


的script.js:

$rootScope.texts = {

  content : 'inceptos suspendisse etiam tempor posuere volutpat tempor dapibus varius nullam sagittis nibh amet in mattis quisque, conubia tempor at eros turpis erat, phasellus tincidunt tristique nisl.', 

  copyright       :   '--- © 2014 RobbieWilliams Interactive. All rights reserved.',
};

3 个答案:

答案 0 :(得分:1)

像这样阅读它们

var scripts = myIFrame.contentWindow.document.getElementsByTagName("script");
for (var i=0;i<scripts.length;i++) {
   if (scripts[i].src) {
       console.log(i,scripts[i].src);
   } else {
       console.log(i,scripts[i].innerHTML);
   }
}

那应该有用。

或者您可以尝试使用myIFrame.contentWindow.document.scripts。见https://developer.mozilla.org/en-US/docs/Web/API/document.scripts

答案 1 :(得分:0)

这取决于iFrame的来源。如果IFrame源域与父DOM的域相同,则可以访问该Iframe的DOM。这将允许您使用jquery获取脚本元素。但是,我不确定这一点。我从未试图将javascript作为html。

$('iframe > script').html();

然后你就可以使用console.log()在控制台中显示它或在父dom中显示它。

如果源域不相同,则需要使用如下所示的插件: http://benalman.com/projects/jquery-postmessage-plugin/

此插件允许来自不同域的iframe相互通信。但是,您需要有权访问iframe源,才能在iframe中包含此javascript。

答案 2 :(得分:0)

首先,为了访问iframe元素,原始页面和iframe必须位于相同域中,或者 CORS 启用以允许资源共享。

假设您可以访问iframe内容,则可以获取iframe内容:

var iframe = $('#frame_main').contents(),
    scripts = iframe.find('script'),
    target = scripts.find('[src$="script.js"]').first();

现在我们有了脚本,我们将异步插入并执行页面中的脚本,并且我们会在使用 onload event 的回调加载脚本时作出反应。

var js = document.createElement('script');
js.type = 'text/javascript';
js.src = target.attr("src");
js.onload = function() {
    // do something when the script has been executed
};

我们知道,HTML是线性呈现的(除非调用函数是异步回调),这意味着当前执行中的脚本是最后一个,所以我们将在当前脚本之后插入新脚本。

var currentScript = $("script").last();
currentScript.after(js);

现在脚本元素已添加到文档中,它将异步执行,我们可以在执行脚本时做出反应,这要归功于 onload回调