如何在WinJS iframe Windows 8应用程序中通过POST向Paypal发送表单?

5

我有一个使用Javascript/HTML编写的Windows 8应用程序,在iframe中有一个Paypal表单:

<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="on0" value="Pages">
<select name="os0">
    <option value="10">$1.95</option>
    <option value="25">$2.95</option>
</select>
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="encrypted" value="[removed]">
<input type="image" src="/btn_buynow_LG.gif" border="0" name="submit" alt="">
</form>

这个表单在所有浏览器中都可以正常工作,包括IE10,但是当从Windows 8应用程序的iframe中提交时,它会将用户带到Paypal主页。这通常表示表单存在问题。我尝试过托管的Paypal按钮、加密的、未加密的按钮,它们都表现出相同的行为。只有当我从Windows 8应用程序中提交此表单时,它才会跳转到Paypal.com主页。
我还尝试了将每个URL添加到我的清单中作为允许的URL:
<ApplicationContentUriRules>
<Rule Match="http://example.com" Type="include" />
<Rule Match="http://*.example.com" Type="include" />
<Rule Match="http://paypal.com" Type="include" />
<Rule Match="http://*.paypal.com" Type="include" />
<Rule Match="https://paypal.com" Type="include" />
<Rule Match="https://*.paypal.com" Type="include" />
</ApplicationContentUriRules>

我尝试添加/删除沙盒属性,并添加所有组合的属性,如下所示:

<iframe sandbox="allow-same-origin allow-top-navigation allow-forms allow-scripts allow-popups" src="http://example.com/paypalbtn.html"></iframe>

如果我去掉target="_blank",那么Windows 8应用程序将导航到黑屏并挂起。我被迫使用alt-tab并关闭应用程序。我认为这是在另一个进程中向新窗口进行表单提交的问题。
如何从Windows 8应用程序的iframe内启动Paypal?
需要一个表单POST吗?我现在意识到一个表单GET可以工作。

1
我认为PayPal不支持iframe表单提交。 - Varun Sridharan
1
@SVarun是正确的。这个问题已经在这个帖子里讨论过了。显然这是一项安全措施。 - SWalters
3个回答

2
Paypal将在Windows 8应用程序中的iframe中启动时阻止向新窗口的表单POST。结果是您会看到Paypal主页而不是购买订单表单。
我可以确认,仅将表单方法切换为GET并使用target="_blank"就可以完美地解决问题。
 <form action="https://www.paypal.com/cgi-bin/webscr" method="get" target="_blank">

解决 iframe 中的这个问题的另一种方法是在文本或图像周围使用标准锚点标签,并手动创建 URL,如下所示:
<a href="https://www.paypal.com/cgi-bin/webscr?custom=[custom info]&item_name=[URL encoded name]&item_number=[num]&amount=9.95&currency_code=USD&cmd=_xclick&business=[paypal email address]&return=[URL encoded URL]">Buy Now</a>

这个答案的功劳归于关于Paypal链接而非按钮的这个页面。

0

我认为 PayPal 不允许 iframe 支持。他们很可能使用以下内容:

X-Frame Options

这可以让他们检测页面是否在iframe中呈现,如果是,则阻止加载它(例如显示空白页面),就像您所经历的那样。

没有任何办法可以绕过此限制。


是的,我可以确认Paypal发送了一个X-FRAME-OPTIONS: SAMEORIGIN的响应头。这将阻止Paypal.com在我的iframe中呈现,但我正在尝试从iframe执行表单提交到新窗口。iframe中的URL是我的URL,因此example.com正在向paypal.com在新窗口中提交。提交似乎是有效的,但我认为Paypal检测到了一些有趣的东西并显示了Paypal首页。 - Scott
从它所说的 "该页面仅可在与页面本身相同的来源上的框架中显示",这意味着新窗口不再是相同的源,或者至少这是我的理解。 - Sir
没问题,因为Paypal不会显示在iframe中。我认为我应该能够在一个不同的源中发布到一个新窗口。 - Scott

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接