Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Iframe中读取加载的脚本?_Javascript_Jquery_Html_Iframe - Fatal编程技术网

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

Javascript 如何在Iframe中读取加载的脚本?,javascript,jquery,html,iframe,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中加载的脚本?

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

我的代码:

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

  • (但我想要相反的结果)

    • 像这样读出来

      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);
         }
      }
      
      var scripts=myIFrame.contentWindow.document.getElementsByTagName(“脚本”);
      
      对于(var i=0;i这取决于iFrame的来源。如果iFrame源域与父DOM的一个域相同,那么您可以访问该iFrame的DOM。这将允许您使用jquery获取脚本元素。但是我不确定这一点。我从未尝试将javascript作为html获取

      $('iframe > script').html();
      
      然后,您可以使用console.log()在控制台或父dom中显示它

      如果源域不相同,则需要使用如下插件:


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

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

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

      var iframe = $('#frame_main').contents(),
          scripts = iframe.find('script'),
          target = scripts.find('[src$="script.js"]').first();
      
      现在我们有了脚本,我们将在页面中异步插入和执行脚本,并在使用onload事件的回调加载脚本时做出反应

      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回调

      访问,以便做什么?一点上下文可能会有所帮助。没什么,我想读取加载到Iframe中的js文件。也许您可以编写一个函数并调用该函数检查是否包含js。@WQuaniran您确定您可以访问iframe内容中的对象吗?是的,但我不知道如何读取它们。在script.js中有一些变量。我想读取它们。我还可以使用类似于
      scripts[I]的东西吗.data
      ?.data不返回任何内容。您需要什么数据?当您拥有脚本标记的src或innerHTML时,您可以访问其内容。。。
      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
      };