在iframe中设置交叉原点变量

问题描述 投票:0回答:1

我正在使用iframe在结帐页面上嵌入表格,并且我试图获取购物车的价格并将其自动输入到“金额”字段中。 cart变量的值似乎为$("span[data-test='cart-price-value']").innerText;当我在控制台中检查它时,但是我是否应该在嵌入iframe的脚本中设置变量或在iframe html本身中设置变量,还是我必须同时为iframe html添加一个jQuery侦听器而感到困惑

而且我还需要从变量中删去'$',因为$("span[data-test='cart-price-value']").innerText;返回其前面带有美元符号的值,例如“ $ 435.66”,我需要它只是“ 435.66”,将不胜感激

javascript bigcommerce
1个回答
0
投票

这里有几件事-

浏览器对跨域iframe具有一些非常严格的限制。如果起源不同,则无法在一个URL上的BigCommerce Checkout与另一个URL上托管的iframe之间进行通信。

[如果您尝试从BC结帐页面使用JavaScript来设置嵌入在iframe中的表单输入的值,则会在控制台中收到安全警告,浏览器将禁止它。

但是,有一个API允许进行这种通信-您可以在这里阅读更多内容:

https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

您将发送和监听自定义“消息”事件并相应地运行代码。

我不是100%的人,但是听起来,您希望将Window.postMessage()用于托管外部表单的iframe / origin,并发送您需要输入的价格。] >

在提供iframe / form代码的页面上,您需要一个事件侦听器来等待此消息的到来,这时您可以拥有一个事件处理程序,该处理程序将使用跨域传递的值消息并修改表单输入值。

现在,就实际实施而言-根据您所托管的Checkout页面类型,它也会变得更加复杂。您是否正在进行优化的页面检出(新页面检出)?如果是这样,您可能需要使用突变体侦听器,因为OPC是外部React应用程序,您无法真正进入内部状态,因此需要使用突变侦听器要等到每个部分(“客户详细信息”,“运输详细信息”,“账单详细信息”,“付款步骤”)都加载完毕-因为这些内容是使用内部React State刷新的,您无法从BC / stencil / cornerstone / blueprint脚本访问。

此处有更多详细信息:https://medium.com/bigcommerce-developer-blog/the-complete-guide-to-checkout-customization-on-bigcommerce-6b566bc36fa9

[如果您使用的是旧版本的结帐,可以在其中手动修改BC服务的结帐的JS和HTML结构,则可能不需要此。

© www.soinside.com 2019 - 2024. All rights reserved.