按钮 onclick 和 href 之间的区别

Difference between button onclick and a href

我正在尝试将 SendOwl 购物车集成到我的应用程序中(应用程序的详细信息在最后)。

为了演示这个问题,我使用纯 HTML / Javascript 创建了一个简单的片段。在 HTML 的头部部分,我有这个:

<script type="text/javascript">
    function SendOwl(url) {                 
        window.location.href=url;
    }
</script>
<script type="text/javascript" src="https://transactions.sendowl.com/assets/sendowl.js" ></script>

正文中我有这个:

示例 1:打开自己的结帐表单 window(不良行为):

<input type="button" onclick="SendOwl('https://transactions.sendowl.com/products/8/5C080C0F/purchase');" value="On Click" />

屏幕截图 1:请注意 URL 已更改,它不是叠加层(与 2 相比)。

示例 2:在模态 window 中打开结帐表单作为覆盖(期望的行为):

<a href='https://transactions.sendowl.com/products/8/5C080C0F/purchase'>a href</a>

屏幕截图 2:URL 保持不变,但表单在叠加层中打开。

您还可以在 SendOwl 的演示页面上看到现场演示。

我的应用程序基于 GWT(准确地说是 SmartGWT)。在我的应用程序中,我调用按钮 onclick 处理程序来调用一个 Javascript,它使用 JSNI 调用(如下所示)调用立即购买 link。但是立即购买 link 始终以完整 window 打开,如上面的示例 1。

public static native void onBuyNowClick(String url) /*-{
  $wnd.SendOwl(url);
}-*/;

我试过 $wnd.open(url) 但结果是一样的。

如何让第一个示例的行为与第二个示例相同,但仍然使用按钮 onclick?

更新:

魔法就在 sendowl.js 脚本中。如果我删除该脚本,那么这两个示例的工作方式相同。如果我能弄清楚该脚本是如何工作的,它可能会提供一些线索,使示例 1 以与示例 2 相同的方式工作。

谢谢。

您只需要:

<script type="text/javascript" src="https://transactions.sendowl.com/assets/sendowl.js" ></script>
<a href="https://transactions.sendowl.com/products/8/5C080C0F/purchase" rel="nofollow"><input type="button" value="Purchase" /></a>

https://help.sendowl.com/help/article/link/button-codes-to-sell-your-product

适合我。

在 GWT 中,您可以在弹出面板中使用 PopupPanel to display the overlay. Personally I never tried embedding a page inside a popup but you can try adding a Frame 对象,如下所示:

PopupPanel popup = new PopupPanel();
Frame frame = new Frame("http://www.yourlink.com/");
popup.setWidget(frame);
popup.setGlassEnabled(true);
popup.center();

至于URL请查看documentation and this thread

我已经通过探索 sendowl.js 自行解决了这个问题。这就是发挥所有魔力的脚本。

这是我修改后的脚本,它使示例 1 的工作方式与示例 2 完全相同:

<script>
    function SendOwl(url) { 
        sendOwl.addLoadingImage();
        sendOwl.loadIframe ('https://transactions.sendowl.com/products/8/5C080C0F/purchase');
    }
</script>
<script src="https://transactions.sendowl.com/assets/sendowl.js"></script>  

感谢所有回复和提供帮助的人。