替代在url中使用hashbang来解决IE9问题

时间:2015-02-02 14:50:36

标签: javascript angularjs url internet-explorer-9 location-provider

我正在使用这些设置在angularjs中创建搜索应用程序:

App Config:

    app.config(
    [
        '$locationProvider',
        function ($locationProvider) {
            $locationProvider.html5Mode({
                enabled: true,
                requireBase: false,
                rewriteLinks: false
            });
        }
    ]
);

问题不在于应用程序本身,而是在我尝试使用IE9访问页面时根本无法访问它。在做了som阅读之后,我发现IE9忽略了一个url中#之后的所有内容,并将用户重定向回主机url(url中的#之前的所有内容)而html5mode的标准后备是hashbang-mode。 Angular docs for $location

我的问题是,是否有人知道在网址中是否有任何方法可以使用hashbangs,或者是否有其他人有这个问题。如果需要更多文档,请告诉我,我会提供!

编辑:这是在控制器内部:

    $scope.$on('$locationChangeSuccess', function () {;
        $scope.searchQuery = $location.search()['q'];
        $scope.search();
    });

编辑: 添加$locationProvider.hashPrefix('!');将无效,因为它只会添加"!"在"#"之后在网址中。

请参阅angular docs中的图片:

Angular docs on locationprovider

1 个答案:

答案 0 :(得分:0)

IE9不支持history.pushState,请参阅:http://caniuse.com/#feat=history

因此当您启用html5Mode时:$locationProvider.html5Mode(true) 对于IE9,它将回退到URL中的# - 没有办法绕过这个

说过你仍然可以使用$location.search(); 你可以得到这样的搜索参数: var searchObject = $location.search(); 要获取特定参数,您可以执行以下操作:$location.search().paramName

有关详细信息,请参阅https://docs.angularjs.org/api/ng/service/ $ location。

$location服务的替代方法是注入$routeParams,请参阅:https://docs.angularjs.org/api/ngRoute/service/ $ routeParams 但我不确定您的使用案例,routeParams仅在路线更改完成后更新