如何阅读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.',
};
答案 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回调。