Javascript重定向奇怪的行为

时间:2016-11-02 04:50:48

标签: javascript jquery redirect

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

我尝试了以下内容:

  1. window.location.href = url;
  2. window.location = url;
  3. window.location.replace(url);
  4. $(location).attr('href',url);
  5. 但以上都没有重定向。然后我在重定向代码行之前放了一个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);
    

    希望这满足评论!

1 个答案:

答案 0 :(得分:1)

因为它在代码之前有警报时重定向,所以我认为它可以使用setTimeout如下:

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