【问题标题】:Submit a form embedded in an iFrame does not work in iOS 7提交嵌入在 iFrame 中的表单在 iOS 7 中不起作用
【发布时间】:2014-02-03 14:39:43
【问题描述】:

在带有mydomain.tld 的网站中,嵌入了一个包含otherdomain.tld 上托管的表单的iFrame。两个站点都是在端口 80 上运行的非 SSL。

现在,此表单不会在运行 iOS 7 的 iPhone 5 上提交。我可以在选择“iPhone Retina(4 英寸 64 位)”时在 iOS 模拟器中重现它(“4 -英寸”)。

提交事件被触发(至少如果我通过 JavaScript 捕获它)但没有根据开发者工具发出请求。

如果我直接打开 iFrame 源,表单会提交。

我在使用 Internet Explorer 时遇到了类似的问题,并了解了 P3P 并可以解决发送特殊 P3P 标头的问题:

P3P: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"

但是对于 Safari 提到的问题,这似乎不是问题。

对于 Safari 和 iFrame 中的表单是否有任何已知限制?

【问题讨论】:

标签: ios iphone iframe mobile-safari p3p


【解决方案1】:

IOS 设备将数字更改为带有 h​​ref="tel:xxxxx" 的锚链接并弄乱 json 数据 http://xatzis.com/2014/03/29/submitting-forms-iframes-ios-devices/

【讨论】:

    【解决方案2】:

    据我所知,问题与在 iFrame 中使用 cookie 有关,这会触发 iFrame 中表单的 Spamshield 以阻止表单提交。

    因为它是一个选择加入的表单,所以我停用了 Spamshield,但我找到了一个解决方案(我没有测试过),它应该通过提交到加载 iFrame 时触发的隐藏表单来使 cookie 工作内容。

    <script>   window.setTimeout(function() {
    if (document.cookie.indexOf('test_cookie=1') < 0) {
      var      
        name = 'test_cookie',
        div = document.getElementById(name),
        iframe = document.createElement('iframe'),
        form = document.createElement('form');
    
      iframe.name = name;
      iframe.src = 'javascript:false';
      div.appendChild(iframe);
    
      form.action = location.toString();
      form.method = 'POST';
      form.target = name;
      div.appendChild(form);
    
      form.submit();
    }   }, 10); </script>
    

    来源:https://gist.github.com/daaku/586182

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多