我正在尝试在事件处理程序中执行JavaScript重定向。事件处理程序从子接收消息,当我收到消息时,我想做一个简单的JS重定向。
我尝试了以下内容:
window.location.href = url;
window.location = url;
window.location.replace(url);
$(location).attr('href',url);
但以上都没有重定向。然后我在重定向代码行之前放了一个alert
。我得到了alert
,当我点击它时,重定向工作了。
因此,警报可行,但当我删除警报时,它不会重定向。
你能帮助我解决这个问题吗?我应该看看的任何方面?有线索吗?
这是我用来向父节点发送消息的代码块(在角度控制器内)
$scope.$watch(
function () { return vm.redirect; },
function () {
window.parent.postMessage({action: 'redirect', value:vm.redirect_url}, "*");
}
);
这是我用来捕获消息并重定向的代码。
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
eventer(messageEvent, function (e) {
switch( e.data.action ){
case 'redirect':
var url = e.data.value;
//alert("**");
window.location.href = url;
//window.location = url;
//window.location.replace(url);
//$(location).attr('href',url);
console.log("INSIDE REDIRECT: ("+url+")");
break;
default: break;
}
}, false);
希望这满足评论!
答案 0 :(得分:1)
因为它在代码之前有警报时重定向,所以我认为它可以使用setTimeout如下:
setTimeout(function(){window.location.href = url;},100);