我实施的解决方案(对@hermes_sandoval表示感谢)是强迫其他页面在模式内的iframe中打开,这样,如果服务需要花费很长时间来处理,那么我将始终由用户控制。
作为付款过程的一部分,我必须通过调用一个表单来打开twitter-bootstrap模态,该表单又会打开一个外部窗口,以银行渠道引导用户输入数据并进行购买来启动该过程。] >
我的问题是,我的页面被隐藏了,因为通道窗口正在执行,所以我无法恢复对该过程的控制,>
window.close();
命令(我不能更改或把手放在上面)
,所以当我更改首字母缩写
window.open("", "payment_method_page", "width=8, height=6");
对于模态,尽管我可以在内部看到付款成功或失败,但频道页面仍在等待和徘徊。同时,应用程序已暂停。
我已经尝试过:
$('#paymentModal').modal('hide');
和:
setTimeout(function(){ $('#paymentModal').modal('hide') }, 10000);
甚至:
$('#paymentModal').on('click', 'a', function(event) {event.preventDefault(); window.open("", "payment_method_page", "width=800, height=600");});
,以为由于我的模态激发了我可能被迫关闭的过程;但是外部窗口对此命令无动于衷。
如何通过JQuery强制关闭第三方窗口?
JavaScript惯用动作
$(document).ready(function() { $('#payment_button_id_copy').val(#{@order.payments.first.payment_button["codigoMedioPago"]}) $('#payment_frequency_copy').val("#{@order.payments.first.payment_frequency}") //window.open("", "payment_method_page", "width=800, height=600"); $('#paymentModal').modal('show'); $('#params_form').submit(); });
The Params_Form
.hide = simple_form_for @order, url: main_app.payment_jump_path, html: { id: 'params_form'}, data: {target: "#paymentModal", toggle: "modal"} do - @order.available_payment_methods.each do |method| = hidden_field_tag "order[payments_attributes][][payment_method_id]", method.id, id: "payment_method_id_copy" = hidden_field_tag "order[payments_attributes][][payment_button_id]", nil, id: "payment_button_id_copy" = hidden_field_tag "order[payments_attributes][][payment_frequency]", nil, id: "payment_frequency_copy" button.submit-btn data-target="#paymentModal" data-toggle="modal" type="submit"
等待外部窗口关闭的Javascript
$(document).ready(function(event){ start_at = +new Date(); $.poll(10000, function(retry){ $.get('/payments/check.json', function(response, status){ if (response['completed'] == true) { $('#paymentModal').modal('hide'); $('.payment-message-waiting').hide(); $('.payment-message-success').removeClass('hide'); $('form#checkout_form_payment_button').submit(); } else { if (response['failed'] == true) { $('.payment-message-waiting').hide(); $('.payment-message-error').removeClass('hide') } else { retry_at = +new Date(); delta = retry_at-start_at // 5 min => 300000 miliseconds => 5 * 60 * 1000 if ( delta > 300000 ){ window.location = '/content/session-expired'; } else { retry(); } } } }) }) $.poll(5000, function(retry) { $.get('/payments/check_payment_presence.js', function(response, status){ var payment_info = document.getElementById('payment-info').hasChildNodes(); if(!payment_info) { retry(); } }) }) });
作为付款过程的一部分,我必须通过调用一个表单来打开twitter-bootstrap模态,该表单又会打开一个外部窗口以通过银行渠道引导该用户启动...来启动该过程……]
我实施的解决方案(对@hermes_sandoval表示感谢)是强迫其他页面在模式内的iframe中打开,这样,如果服务需要花费很长时间来处理,那么我将始终由用户控制。
javascript:
$(document).ready(function() {
$('#payment_button_id_copy').val(#{@order.payments.first.payment_button["codigoMedioPago"]})
$('#payment_frequency_copy').val("#{@order.payments.first.payment_frequency}")
$('#iframeRedirect').html('');
var iframe = "<iframe name='payment_method_page' style='height: 660px;'/>";
$('#iframeRedirect').append(iframe);
$('#paymentModal').modal('show');
$('#params_form').submit();
});
我实施的解决方案(对@hermes_sandoval表示感谢)是强迫其他页面在模式内的iframe中打开,这样,如果服务需要花费很长时间来处理,那么我将始终由用户控制。