opener.document()不适用于CHROME

时间:2012-06-13 06:44:13

标签: javascript

以下脚本在CHROME浏览器中不起作用,IE很好。

我已将opener.document ...更改为window.opener.document ....但情况相同。
它没有关闭窗口并将数据传输到父页面。

function mycoupon() {
    window.open("my_coupon3.jsp?amt=<%=pay_price2%>",
                'coupon_win',
                'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollb‌​ars=yes, resizable=no,width=780,height=540');
}

function sel_coupon(c_id, amt) {
    var tot = opener.document.joinform.Org_totalprice.value;
    tot = String(Number(tot) - Number(amt));
    opener.document.joinform.totalprice.value = tot;
    opener.document.joinform.coupon_id.value = c_id;
    opener.document.joinform.all["tot"].innerHTML = maskNum(opener.document.joinform.Org_totalprice.value) + "USD - " + maskNum(amt) + " USD &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b><font color='red'>Total : " + maskNum(tot) + " USD</font></b> ";
    opener.cal_payment_money();
    self.close();
}

1 个答案:

答案 0 :(得分:1)

定义一个全局变量并为新窗口分配一个引用,然后在sel_coupon()函数中使用它。

以下是一个例子:

var new_window_handle;

function mycoupon() {
    new_window_handle = window.open("my_coupon3.jsp?amt=<%=pay_price2%>",
                'coupon_win',
                'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollb‌​ars=yes, resizable=no,width=780,height=540');
}

function sel_coupon(c_id, amt) {
    var tot = new_window_handle.opener.document.joinform.Org_totalprice.value;
    tot = String(Number(tot) - Number(amt));
    new_window_handle.opener.document.joinform.totalprice.value = tot;
    new_window_handle.opener.document.joinform.coupon_id.value = c_id;
    new_window_handle.opener.document.joinform.all["tot"].innerHTML = maskNum(new_window_handle.opener.document.joinform.Org_totalprice.value) + "USD - " + maskNum(amt) + " USD &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b><font color='red'>Total : " + maskNum(tot) + " USD</font></b> ";
    new_window_handle.opener.cal_payment_money();
    self.close();
}

如果您对此行为的原因感兴趣,那是因为IE假定默认window是最新的行为。这就是为什么当你在IE上运行代码时它会尝试在新窗口中找到opener,但其他浏览器会更严格(在这种情况下更好)