[英]IE Window loses focus on start of Angular app with any XMLHttpRequest
我看到IE 10和11有一些奇怪的行为,其中在加载AngularJS应用程序时,窗口失去了焦点。 仅在页面最初加载时发出XMLHttpRequest请求时才会发生。 在此之后,任何有或没有ajax的应用程序交互都是正常的。 我尝试使用$ resource以及$ http发出请求。 两者具有相同的结果。 我的应用程序的资源模块定义为:
/**
* Resource module
*/
angular.module('appname.resources.sampleData', ['ngResource'])
.service('sampleDataResource', ['$resource', 'restUrl', SampleRestResource])
.constant('restUrl', '/url/path/to/rest/data/:id');
/**
* Resource definition
*/
function SampleRestResource ($resource, restUrl) {
this.resource = $resource(restUrl);
}
/**
* Resource query function
*/
SampleRestResource.prototype.query = function () {
return this.resource.query().$promise;
};
使用其余资源的页面控制器定义为:
/**
* Page module definition
*/
angular.module('appname.pages.defaultpage', [])
.constant('strTitle', 'Page Title')
.controller('defaultPageController', ['$scope', 'strTitle', 'sampleDataResource', DefaultPageController]);
/**
* Page controller definition
*/
function DefaultPageController($scope, strTitle, sampleDataResource) {
$scope.pageTitle = strTitle;
sampleDataResource.query().then(function(data) {
$scope.sampleDataFromResource = data;
});
}
如果我用等效的JQuery换出控制器中的ajax请求,则窗口不会失去焦点。 控制器然后变为:
/**
* Page controller definition
*/
function DefaultPageController($scope, strTitle, sampleDataResource) {
$scope.pageTitle = strTitle;
$.get("/url/path/to/rest/data").done(
function(data){
$scope.sampleDataFromResource = data;
}
);
}
正如我在对此问题的简介中提到的那样,在$ routeProvider配置或使用'templateUrl'的指令定义中请求HTML模板时,我会看到相同的结果。 但是,我开始使用grunt-html2js,并以此为解决方案感到非常满意。
我没有反对使用JQuery的方法,而是希望在这种情况下使用Angular框架来保持代码的一致性和可测试性。 如果有人可以纠正我的方法或有任何想法,我将不胜感激。
该问题是由angular-block-ui插件引起的。 我们正在/正在将其用于ajax请求的所有“请稍候”消息传递。 从我的应用中删除插件后,该问题不再发生。 对于其他感兴趣的人,我使用的插件版本是0.2.0。 仅通过以默认行为加载插件(并在应用加载时发出ajax请求)即可复制问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.