J'ai une application AngularJS très simple que j'utilise pour tester la création d'une nouvelle extension Safari. Quand je l'exécute à partir de localhost dans une page Safari normale tout fonctionne, mais quand je cours le même code dans le contexte d'un prolongement d'extension ne fonctionne pas. J'ai passé du temps à tracer le code de routage angulaire dans les deux scénarios (ce qui est plutôt amusant) pour essayer de trouver des différences, mais je n'ai pas pu le faire sauf le chemin de redirection (http://localhost/.../helloworld.html#/login
vs safari-extension://com.yourcompany.../helloworld.html#/login
). Le fait de cliquer sur le chemin d'extension directement dans une fenêtre de navigateur rend la même chose que dans l'extension: la fonctionnalité de base AngularJS fonctionne (mise à jour de "sometext") mais pas de routage (la spécification d'itinéraire ne remplace pas ng-view). Aucune erreur n'est lancée.Le routage AngularJS ne fonctionne pas dans Safari Extension
helloworld.html
<!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>
app.js
var obApp = angular.module('obApp', ['ngRoute', 'obControllers']);
obApp.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/login', {
templateUrl: 'login.html',
controller: 'LoginCtrl'
}).
otherwise({
redirectTo: '/login'
});
}]);
controllers.js
var obControllers = angular.module('obControllers', []);
obControllers.controller('LoginCtrl', ['$scope',
function($scope) {
// do stuff
}
]);
login.html
HERE I AM!
MISE À JOUR:
Il a quelque chose à voir avec la demande XHR pour obtenir la page de routage - à partir d'une page Web régulière du XHR.send() retourne readyState = 4 et status = 200, à partir de l'extension, il renvoie readyState = 3 et status = 0 (quand il passe à readyState = 4 status est toujours 0). Il me fait suspecter des restrictions XMLHTTPRequest d'origine croisée mais il demande définitivement la page du même domaine exact (safari-extension: // ...)
AIDE! :-)