Office.js getFilePropertiesAsync завершается с ошибкой при втором вызове в Angular.js

У меня есть приложение панели задач Office, написанное с помощью Office Javascript API (Office.js), которое вызывает Office.context.document.getFilePropertiesAsync и помещает возвращаемый URL-адрес в угловую переменную:

$scope.getDocumentUrl = function () {

    Office.context.document.getFilePropertiesAsync(function (asyncResult) {
        $scope.url = asyncResult.value.url;
    });
};

Затем у меня есть кнопка, которая вызывает это. Этот файл работает в первый раз, но когда я нажимаю кнопку во второй раз, он никогда не входит в обратный вызов и отображает эту ошибку:

TypeError: Ожидается объект в verifyAndExtractCall (https://localhost:44304/scripts/office/1.1/o15apptofilemappingtable.js:11:54588) в анонимной функции (https://localhost:44304/scripts/office/1.1/o15apptofilemappingtable.js:11:83048) в анонимной функции (https://localhost:44304/scripts/office/1.1/o15apptofilemappingtable.js:11:86071) по адресу $scope.getDocumentUrl (https://localhost:44304/AngularJs/controllers/sandpit.controller.js:130:6) в $parseFunctionCall (https://localhost:44304/AngularJs/bower_components/angular/angular.js:12403:7) при обратном вызове (https://localhost:44304/AngularJs/bower_components/angular/angular.js:21566:17) в Scope. прототип.$eval (https://localhost:44304/AngularJs/bower_components/angular/angular.js:14466:9) в Scope.prototype.$apply (https://localhost:44304/AngularJs/bower_components/angular/angular.js:14565:11) в анонимной функции (https://localhost:44304/AngularJs/bower_components/angular/angular.js:21571:17) на jQuery.event.dispatch (https://localhos

Это упрощенная версия другой ситуации, которая создает ту же ошибку. Это также происходит с getFileAsync. Я знаю, что мне нужно $scope.$apply, чтобы отобразить изменение. Я знаю, что вы можете получить URL другими способами. Мне нужно знать причину ошибки.


person Paul T Davies    schedule 27.05.2015    source источник


Ответы (1)


Я тестирую ваш сценарий на своей локальной машине. Я не мог воспроизвести вашу проблему.

В моем простом тестовом приложении есть два файла: AngularTest.html и AngularTest.js.

Содержимое в AngularTest.html:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <title></title>
    <script src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.js"></script>
    <script src="//ajax.microsoft.com/ajax/4.0/1/MicrosoftAjax.js" type="text/javascript"></script>
    <script src="https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js" type="text/javascript"></script>
    <script src="AngularTest.js" type="text/javascript"></script>
</head>
<body>
    <div ng-app="myApp" ng-controller="myCtrl">
        <button ng-click="getDocumentUrl()">Get Url!</button>
        Url is: {{url}}
    </div>
</body>
</html>

Контент в AngularTest.js:

(function () {
    "use strict";
        var app = angular.module('myApp', []);
        app.controller('myCtrl', function($scope) {
            $scope.url = "";
            $scope.getDocumentUrl = function () {
                Office.context.document.getFilePropertiesAsync(function (asyncResult) {
                    $scope.url = asyncResult.value.url;
                });
            };        
        });        
    Office.initialize = function (reason) {      
    };
})();

Вы можете получить URL-адрес, нажав кнопку «Получить URL». Я тестировал его в Excel 2013 SP 1.

person Kejing Peng    schedule 17.06.2015
comment
Конечно. Я подключаю отладчик к IE. Я подтверждаю, что Office.context.document.getFilePropertiesAsync() вызывается каждый раз, когда я нажимаю кнопку, и исключение не возникает. - person Kejing Peng; 19.06.2015