Phonegap iOS Iframe访问 从PhoneGap访问iOS中的iframe

Phonegap iOS Iframe访问 从PhoneGap访问iOS中的iframe,ios,html,iframe,cordova,same-origin-policy,Ios,Html,Iframe,Cordova,Same Origin Policy,我很难让PhoneGap(2.9.0)在iOS(6.0.1)上访问iframe 应用程序的index.html包含一个iframe和一个函数,用于检查在加载框架后是否可以读取框架的内容 应用程序索引.html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="user-scalable=no, init

我很难让PhoneGap(2.9.0)在iOS(6.0.1)上访问iframe

应用程序的index.html包含一个iframe和一个函数,用于检查在加载框架后是否可以读取框架的内容

应用程序索引.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="user-scalable=no, initial-scale=1, 
     maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, 
     target-densitydpi=device-dpi" />
    <script type="text/javascript" charset="utf-8" src="./phonegap.js"></script>
    <title>Test</title>
  </head>
  <body style="background-color: #000;">
    <iframe name="framewrap" id="framewrap"
        style="border:0;position: absolute; top: 0; 
        left: 0;width: 100%; height:100%; background-color: #fff;"
        src="http://www.somedomain.de/somepath/index.html">
    </iframe>

    <script type="text/javascript">
      window.setTimeout(go, 2000);
      function go(){
      iframe = document.getElementById('framewrap');
      innerDoc = iframe.contentWindow;
      alert(innerDoc.document.getElementById('canvas'));
      }
    </script>
  </body>
</html>

试验
设置超时(go,2000);
函数go(){
iframe=document.getElementById('framewrap');
innerDoc=iframe.contentWindow;
警报(innerDoc.document.getElementById('canvas');
}
iframe中的文档:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <script type="text/javascript">
      alert('iframe loaded');
    </script>
    <title>test</title>
  </head>
  <body style="margin:0;">
  <canvas id="canvas" style="position: absolute; top:0; left:0;">
    <p>Your browser does not support the canvas element.</p>
  </canvas>
  </body>
</html>

警报(“已加载iframe”);
测试
您的浏览器不支持画布元素

发生了什么:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <script type="text/javascript">
      alert('iframe loaded');
    </script>
    <title>test</title>
  </head>
  <body style="margin:0;">
  <canvas id="canvas" style="position: absolute; top:0; left:0;">
    <p>Your browser does not support the canvas element.</p>
  </canvas>
  </body>
</html>
如果我构建应用程序并在Android(4.2.2)上运行它,框架被加载,一个警报告诉我
iframe-loaded
,另一个警报对话框弹出,告诉我存在
htmlcanvaseElement
。 但是,如果我在iPod Touch上打开应用程序,我只会收到一个警告对话框,告诉我
“null”
。 未出现
iframe loaded
警报,表明iframe根本未加载

我已经尝试了很多方法来让它工作,但是失败了,因为我没有mac,所以我无法正确地调试-苹果-

我所怀疑的:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <script type="text/javascript">
      alert('iframe loaded');
    </script>
    <title>test</title>
  </head>
  <body style="margin:0;">
  <canvas id="canvas" style="position: absolute; top:0; left:0;">
    <p>Your browser does not support the canvas element.</p>
  </canvas>
  </body>
</html>
与应用程序捆绑的html文件作为文件执行,并使用
文件
协议。iframe使用
http
协议。因此,同源策略生效,我无法访问iframe

为什么我不确定:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <script type="text/javascript">
      alert('iframe loaded');
    </script>
    <title>test</title>
  </head>
  <body style="margin:0;">
  <canvas id="canvas" style="position: absolute; top:0; left:0;">
    <p>Your browser does not support the canvas element.</p>
  </canvas>
  </body>
</html>
但这意味着不同平台的行为不一致,因为它是在安卓系统上工作的。所以我并不完全相信我的怀疑是正确的。 此外,如果缺少
iframe-loaded
警报,则表明同源策略不是问题所在,因为至少框架应该像在桌面上一样加载,而在桌面上,同源策略仅阻止画布警报显示

因此:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <script type="text/javascript">
      alert('iframe loaded');
    </script>
    <title>test</title>
  </head>
  <body style="margin:0;">
  <canvas id="canvas" style="position: absolute; top:0; left:0;">
    <p>Your browser does not support the canvas element.</p>
  </canvas>
  </body>
</html>
  • 我的怀疑正确吗

  • 有没有办法让它跨平台工作

  • 我很感谢任何建议,希望有人能帮助我


    感谢您抽出时间阅读

    我不是iframe方面的专家,但我会给你一个提示。。使用jqueryout的load函数代替iframe()或GET,您可以返回html格式的返回数据并显示在div中


    也许这是一个比您尝试安装的iframe更简单的选择…

    谢谢您的回复。我尝试过通过ajax和其他方式获取数据。不幸的是,iOs阻止了这些。错误是,将不会在跨域Web服务调用中出现?我不知道您使用什么语言创建Web服务,但在php中应该是这样的:header('Access-Control-Allow-Origin:');标题('Content-Type:application/json');