我有一个需要提交到iframe的表单。它在Windows和某些旧版Mac OS中运行良好。但它不适用于较新的版本。我已经使用Mac OS X Mountain Lion 10.8.3进行了测试,但它不起作用。我的用户在不同的OS X版本上报告了同样的问题。
以下是代码:
<form action="https://nidieunimaitre.spreadshirt.com/shop/basket/addtobasket" style="padding: 0px;" method="post" target="formiframe" name="tshirt_form" id="tshirt_form">
<input type="hidden" name="product" id="productId" value="17695932"/>
<input type="hidden" name="article" id="articleId" value="7048248"/>
<input type="hidden" name="view" id="currentView7048248" value="351"/>
<input type="hidden" name="color" id="productColor7048248" value="2"/>
<input type="hidden" name="size" id="size" value="2"/>
<input type="hidden" name="quantity" id="quantity" value="1"/>
<a onclick="document.tshirt_form.submit()"
id="popupajouterpanier" href="#inlinepopupajouterpanier">Ajouter au panier</a>
<iframe src="" name="formiframe" id="formiframe" width="400" height="400"></iframe>
</form>
或者你可以在我的网站上测试它: http://www.ni-dieu-ni-maitre.com/mac.php
表格应该在篮子上添加一件T恤,然后用刚刚添加的T恤显示篮子的页面。使用Windows,一切都很完美。 但是对于OS X 10.8.3,当你提交表单时,它只会将篮子的页面加载到iframe中,但篮子仍然是空的!看起来表单没有正确发送数据。
当我使用OS X 10.8.3进行测试时,该错误仅发生在Safari上。该表格适用于Firefox。 但我的一些用户报告说,无论是否使用Safari或Firefox,这项工作都无法在OS X下运行。
请注意,这是跨域的(不确定是否重要)。页面将表单的数据发送到不同的域(spreadshirt.com的篮子)。
如果我不将表单提交到iframe,表单将会有效。
更新:表单的操作目标是spreadshirt.com购物篮。我刚刚注意到,如果我在提交表单之前使用Safari访问此页面,那么在将其提交给iframe时它将起作用!如果我不首先访问spreadshirt.com网站,Safari似乎不想创建cookie。但我不明白为什么它不适用于其他浏览器以及为什么这个bug只影响iframe ...任何解决方法? 根据另一个主题,它似乎是一个跨域cookie问题:Setting cross-domain cookies in Safari
更新#2:将Safari的配置设置为永不阻止cookie似乎可以解决问题。默认为“阻止第三方cookie”。那么除了不得不让我的用户更改他们的设置外,我的情况有哪些解决方法?