我有一个非常简单的AngularJS应用程序,我用它来测试新的Safari扩展的创建。当我从常规Safari页面中的localhost运行它时,一切正常,但是当我在扩展路由的上下文中运行相同的代码时,这是行不通的。
我花了一些时间在两个场景中追踪Angular路由代码(这很有趣),试图找到差异但除了重定向路径(http://localhost/.../helloworld.html#/login
与{{1 }})。直接在浏览器窗口中访问扩展路径呈现我在扩展中看到的相同的东西 - 基本的AngularJS功能正在工作(更新“sometext”)但路由不是(路由规范不替换ng-view)。没有错误被抛出。
的helloworld.html
safari-extension://com.yourcompany.../helloworld.html#/login
app.js
<!DOCTYPE html>
<html ng-app="obApp">
<head>
<title>Hello World, AngularJS</title>
<script type="text/javascript" src="angular.js"></script>
<script type="text/javascript" src="angular-route.js"></script>
<script type="text/javascript" src="app.js"></script>
<script type="text/javascript" src="controllers.js"></script>
</head>
<body>
Write some text in textbox:
<input type="text" ng-model="sometext" />
<h1>Hello {{ sometext }}</h1>
<div ng-view></div>
</body>
</html>
controllers.js
var obApp = angular.module('obApp', ['ngRoute', 'obControllers']);
obApp.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/login', {
templateUrl: 'login.html',
controller: 'LoginCtrl'
}).
otherwise({
redirectTo: '/login'
});
}]);
的login.html
var obControllers = angular.module('obControllers', []);
obControllers.controller('LoginCtrl', ['$scope',
function($scope) {
// do stuff
}
]);
更新
它与获取路由页面的XHR请求有关 - 从常规网页XHR.send()返回readyState = 4和status = 200,从扩展返回readyState = 3和status = 0 (当它移动到readyState = 4状态仍为0时)。它让我怀疑跨源XMLHTTPRequest限制,但它肯定是从完全相同的域请求页面(safari-extension:// ...)
HELP! : - )
答案 0 :(得分:0)
我在这里回答我自己的问题,因为看起来这就是我需要继续进行的问题,但如果有人有更好的想法,请告诉我们。
如果在位置协议为“safari-extension”的情况下对请求有响应,我已经攻击AngularJS核心库(ugh)以返回状态200(否则返回404)。作者对协议的条件是“文件”做了同样的事情,因为在这种情况下它也总是返回0状态,所以我感觉不太糟糕。
我会看到我是否可以引起谷歌的注意,要么他们可以启发我的遗失,也可能让他们在未来的转载中添加它。
<强>更新强>
在GitHub项目中查看此代码的历史记录,我看到他们实现了我将在更高版本的AngularJS中提出的相同修复程序。 : - )