现在有两个窗口(A:显示发布的信息,B:发布信息页面)
我从窗口A点击发布到窗口B(用的是window.open方式打开),B上传成功后,我关闭B了,但是A没有刷新,我最新发布那条没有显示,我有上传成功后返回的状态值,现在想上传成功之后刷新窗口A,然后关闭当前窗口,但是现在卡在不知道该如何让窗口A刷新!请指点一下
在B中通过window.opener获取A
window.opener.location.href=window.opener.location.href; 是这样写吗
@ChEn嘉豪: 这是干啥
@jello chen: 怎么获取呢,能写个大概出来看看吗?
@ChEn嘉豪: 比如A.html:
<input type="button" value="Click Me" id="btn" /> <script type="text/javascript"> window.onload = function() { var btn = document.getElementById("btn"); btn.onclick = function() { window.open("HtmlPage2.html", "new window", "width=200,height=100"); } } function changeBtnValue(p) { var btn = document.getElementById("btn"); btn.value = p; } </script>
B.html:
<input type="button" value="Change" id="btn"/> <script type="text/javascript"> window.onload = function () { var btn = document.getElementById("btn"); btn.onclick = function () { window.opener.changeBtnValue("fuck"); } } </script>
这是你就可以在B中修改A中Button的Value了
@jello chen: 是不是同理我可以在A窗口里面写个刷新页面方法,在B窗口调用A方法
@ChEn嘉豪: 是的
@jello chen: cannot call method 'reload' of null at xxx.html 返回上述的错误,空方法
@ChEn嘉豪: 你可以将我上面贴出来的copy到html页面测试下
window.opener 正解
子窗口关闭时 利用 $.pm 发送消息,父窗口监听,并处理
代码如下:view b
// 你的代码 // ....... // // 关闭窗口之前操作 $.pm({ target: window.opener, type: 'PaymentMethodDetailsResult', data: true }); window.close();
view a
// 监听子窗口消息 $.YzMessage('PaymentMethodDetailsResult', function (result) { if (result) grid.load(); });
$.YzMessage 代码:
; (function ($) { $.extend({ YzMessage: function (type, callback) { $(window).off('message.' + type + '.YzMessage').on('message.' + type + '.YzMessage', function (m) { var _data = eval('(' + m.originalEvent.data + ')'); if (_data.type == type) { callback.call($, _data.data); } }); } }); })(jQuery);
$.pm
https://github.com/Y2zz/postmessage
window.opener.location.href = 'a窗口路径?'+ 加需要的参数
其他属性都是不能获取
子窗口能做的是重新指定母窗口路径 母窗口刷新的时候 根据链接参数判断做什么操作