【问题标题】:AngularJS routing doesn't work in Safari ExtensionAngularJS 路由在 Safari 扩展中不起作用
【发布时间】:2014-06-29 21:37:35
【问题描述】:

我有一个非常简单的 AngularJS 应用程序,我用它来测试新 Safari 扩展程序的创建。当我在常规 Safari 页面中从本地主机运行它时,一切正常,但是当我在扩展路由的上下文中运行相同的代码时,它不起作用。

我花了一些时间在这两种情况下跟踪 Angular 路由代码(这很有趣),以试图找到差异,但除了重定向路径(http://localhost/.../helloworld.html#/loginsafari-extension://com.yourcompany.../helloworld.html#/login)外,我一直无法找到差异。直接在浏览器窗口中点击扩展路径会呈现与我在扩展中看到的相同的东西 - 基本的 AngularJS 功能正在工作(更新“sometext”)但路由不是(路由规范不会取代 ng-view)。没有错误被抛出。

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!

更新:

它与获取路由页面的 XHR 请求有关 - 从常规网页 XHR.send() 返回 readyState=4 和 status=200,从扩展它返回 readyState=3 和 status=0 (当它移动到 readyState=4 时,状态仍然是 0)。这让我怀疑跨域 XMLHTTPRequest 限制,但它肯定是从完全相同的域请求页面(safari-extension://...)

帮助! :-)

【问题讨论】:

    标签: angularjs xmlhttprequest angularjs-routing safari-extension


    【解决方案1】:

    我在这里回答我自己的问题,因为看起来这就是我需要继续进行的方式,但如果有人有更好的想法,请告诉我们。

    如果在位置协议为“safari-extension”的条件下对请求有响应(否则返回 404),我已经破解了 AngularJS 核心库(呃)返回状态 200。作者对协议为“文件”的条件做了同样的事情,因为在这种情况下它也总是返回 0 状态,所以我不觉得太糟糕。

    我会看看我是否可以引起 Google 的注意,以便他们可以告诉我我缺少什么,或者可能让他们在未来的版本中添加它。

    更新:

    查看 GitHub 项目中这段代码的历史,我发现他们实现了我将在更高版本的 AngularJS 中提出的相同修复。 :-)

    【讨论】:

      猜你喜欢
      • 2016-09-05
      • 2016-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      • 2017-05-02
      • 2018-03-18
      相关资源
      最近更新 更多