นี่คือวิธีการที่ใช้ในCommerce SagePayและCommerce Paypoint Drupal modules ซึ่งโดยทั่วไปจะเปรียบเทียบdocument.location.href
กับค่าเก่าโดยการโหลด iframe ของตัวเองก่อนแล้วจึงทำการต่อภายนอก
ดังนั้นโดยทั่วไปแนวคิดก็คือการโหลดหน้าว่างเป็นตัวยึดตำแหน่งด้วยรหัส JS ของตัวเองและรูปแบบที่ซ่อนอยู่ จากนั้นโค้ด JS หลักจะส่งแบบฟอร์มที่ซ่อนไว้ซึ่ง#action
ชี้ไปที่ iframe ภายนอก เมื่อมีการเปลี่ยนเส้นทาง / ส่งรหัส JS ซึ่งยังคงทำงานอยู่ในหน้านั้นสามารถติดตามdocument.location.href
การเปลี่ยนแปลงค่าของคุณ
นี่คือตัวอย่าง JS ที่ใช้ใน iframe:
;(function($) {
Drupal.behaviors.commercePayPointIFrame = {
attach: function (context, settings) {
if (top.location != location) {
$('html').hide();
top.location.href = document.location.href;
}
}
}
})(jQuery);
และนี่คือ JS ที่ใช้ในหน้าหลัก:
;(function($) {
/**
* Automatically submit the hidden form that points to the iframe.
*/
Drupal.behaviors.commercePayPoint = {
attach: function (context, settings) {
$('div.payment-redirect-form form', context).submit();
$('div.payment-redirect-form #edit-submit', context).hide();
$('div.payment-redirect-form .checkout-help', context).hide();
}
}
})(jQuery);
จากนั้นในหน้า Landing Page ว่างคุณต้องรวมฟอร์มซึ่งจะเปลี่ยนเส้นทางไปยังหน้าภายนอก
src
มีการเปลี่ยนแปลงสถานที่ให้บริการเมื่อมีการเชื่อมโยงใน iframe มีการคลิก? ฉันไม่แน่ใจเกี่ยวกับเรื่องนี้ - ถ้าฉันต้องเดาถ้าจะพูดว่า "ไม่" มีมีวิธีการที่จะคุณสมบัติจอแสดงผล (ใน Firefox ที่ AFAIK น้อย) แต่ผมไม่แน่ใจว่ามันจะเป็นของใช้ใด ๆ ในกรณีนี้