【问题标题】:Javascript redirect strange behaviorJavascript重定向奇怪的行为
【发布时间】:2016-11-02 04:50:48
【问题描述】:

我正在尝试在事件处理程序中执行 JavaScript 重定向。事件处理程序接收来自孩子的消息,当我收到消息时,我想做一个简单的 JS 重定向。

我尝试了以下方法:

  1. window.location.href = url;
  2. window.location = url;
  3. window.location.replace(url);
  4. $(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


【解决方案1】:

因为它在代码之前有警报时会重定向,所以我认为它可以通过使用 setTimeout 来工作,如下所示:

setTimeout(function(){window.location.href = url;},100);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 2010-12-08
    • 1970-01-01
    • 2011-05-18
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多