【发布时间】:2016-11-02 04:50:48
【问题描述】:
我正在尝试在事件处理程序中执行 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);
希望这能让cmets满意!
【问题讨论】:
-
你能显示完整的javascript代码吗?
-
在上下文中显示整个代码,一行代码不提供任何信息。
-
您的浏览器阻止了重定向。请在菜单栏右上角选择允许
-
后台发生了一些事情(可能 HTML 正在完成加载),导致对
window.location的更改被忽略。因为您正在执行alert并且 javascript 正在阻止它有时间完成的任何事情,从而使重定向成为可能。这是一个猜测。如果没有minimal reproducible example,就不可能确定。照原样,这个问题是题外话:不清楚 -
感谢您的 cmets。我已根据您的 cmets 编辑了我的问题!
标签: javascript jquery redirect