2015-02-13 3 views
2

В настоящее время создается хром-расширение, которое находится внутри других приложений. В настоящее время приложение представляет собой приложение, основанное на ember, и поэтому оно имеет изменения url через javascript.

В какой-то момент это работало, но я не могу заставить его работать. Почему это не работает?

 $rootScope.$watch(function(){ 
      return window.location; 
     }, function(value){ 
      console.log(value) 
      $rootScope.locationChanged(); 
     }, true) 
+0

К сожалению вы можете уточнить, это приложение ember или угловое приложение? –

+0

Я являюсь угловым приложением внутри хромированного расширения, которое должно работать внутри приложения ember (zendesk.com) –

+0

Хорошая проблема! +1 и любимый, просто из любопытства (не может испытать atm себя), не могли бы вы дать 'object.observe' спину? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe – iH8

ответ

0

Попробуйте использовать $ окно вместо:

$scope.location = $window.location; 
$watch('location', function() { 
    ... // location changed 
}) 
+0

Отличная идея ... не повезло :( –

0

расположение объекта, так что если вы собираетесь смотреть, что вам нужно сделать:

$scope.$watch('window.location', function(){ 
}, true); 

Третий параметр делает глубокий осмотр свойств местоположения, а не ссылка на само местоположение. Это приведет к срабатыванию часов, если какое-либо из свойств изменится.

В качестве временного решения можно попробовать прослушивает $ locationChangeSuccess событий на $ rootScope вместо

$rootScope.$on('$locationChangeSuccess', function() { 
    $rootScope.locationChanged(); 
} 
+0

Добавил это уже! –

+0

Ahh, пропустил это! –

+0

Не стоит беспокоиться :) Хорошая мысль –

0

Что вы делаете, не может работать. У вас есть доступ к неправильному объекту окна:

Вы не можете. Фоновая страница расширения выполняется в одном процессе, а обновленная вкладка выполняется отдельным процессом. Различные процессы не могут совместно использовать объекты, так что вы не можете получить прямой доступ к объекту окна лепестка от фона страницы внутреннего абонента

От: https://stackoverflow.com/a/22599856/2019281

Окна объекта сценарий содержания не видит тот же объект окна, который видит страница.

От: https://stackoverflow.com/a/12396221/2019281

+0

Я в настоящее время работает в качестве сценариев контента и, следовательно, запускать на странице и вводить на страницу –

+0

Вы очень близки, хотя! Фон работает только один раз :) –

+0

Что говорит последняя цитата, объект окна вашего скрипта контента не имеет доступа к оконный объект страницы, на которой вы работаете. Таким образом, на экране window.location в вашем скрипте контента просматривается объект окна вашей страницы содержимого, а не страницы, на которой изменяется местоположение, поэтому часы не срабатывают. – iH8

0

Вы можете использовать следующие три функции, чтобы отслеживать изменения маршрута

HTML

<body ng-app="myApp" ng-controller="AppCtrl">......</body> 

JS

.controller('AppCtrl', function ($scope, $rootScope, $log, $location) { 

    $scope.$on('$routeChangeStart', function (event, toState, toParams, fromState, fromParams) { 

    }); 

    $scope.$on('$routeChangeSuccess', function (event, toState, toParams, fromState, fromParams) { 

    }); 

    $scope.$on('$routeChangeError', function (event, toState, toParams, fromState, fromParams) { 

    }); 

}); 
Смежные вопросы