2017-07-01 65 views
1

我有一個平均堆棧的網站。最初,views/index.html(具有<ui-view></ui-view>)是所有頁面的入口點。它使用angular-ui-routerhtml5mode。因此,瀏覽器中的https://localhost:3000/XXXX將保持不變(而不是添加#),並顯示基於路由器的相應內容。添加office.js在網址中添加#,然後將其刪除

然後,我希望服務器也服務於Office加載項。我將需要views/addin.html,其中包含office.js和另一個路由器,以便該網站提供一組網址https://localhost:3000/addin/XXXX,我不介意它是否爲html5mode或不是(某個url可能包含#某處)。

所以這裏的routes/index.js的correpsonding:

router.get('/addin/*', function (req, res) { 
    console.log("router.get /addin/*"); 
    res.sendfile('./views/addin.html') 
}); 

router.get('*', function(req, res) { 
    console.log("router.get *"); 
    res.sendfile('./views/index.html'); 
}); 

這裏是views/addin.html

<html> 
<head> 
    <title>F-addin</title> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.3.2/angular-ui-router.js"></script> 
    <!--<script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>--> 
    <base href="/" /> 
</head> 
<body ng-app="addinF"> 
    addin content 
    <ui-view ng-cloak></ui-view> 
</body> 
<script> 
    var addinApp = angular.module('addinF', ['ui.router']) 
    addinApp.config(['$stateProvider', '$locationProvider', function ($stateProvider, $locationProvider) { 
     $stateProvider 
      .state('addinNew', { 
       url: '/addin/new', 
       template: "new page" 
      }) 
      .state('addinHome', { 
       url: '/addin/home', 
       template: "home page" 
      }) 
     $locationProvider.html5Mode(true); 
    }]); 
</script> 
</html> 

office.js在瀏覽器的工作評價如上,https://localhost:3000/addin/newhttps://localhost:3000/addin/home好。但是,當office.js未註釋時,會出現一個奇怪的行爲:在瀏覽器中輸入https://localhost:3000/addin/new將更改爲https://localhost:3000/#/addin/new,然後更改回https://localhost:3000/addin/new。我們會看到addin content new page出現一次並消失。

隨着office.js註釋掉,如果我們加載一個清單文件與<SourceLocation DefaultValue="https://localhost:3000/addin/new"/>,我們也會看到在任務窗格中addin content new page出現一次,消失,然後Add-in Error Something went wrong and we couldn't start this add-in. Please try again later or contact your system administrator.

沒有html5mode這裏,.../addin/new.../addin/home在瀏覽器將只顯示addin content;該加載項可以加載,也只有addin content

我的目標是讓一個加載項指向.../addin/new.../addin/home工作。必須在某處加載office.js。我不介意它是否爲html5mode(即,網址爲#),但無論如何這種行爲都是奇怪的或不令人滿意的。有誰知道如何解決它或有一個解決方法?

+0

https:// stackoverflow的重複項。COM /問題/ 44604703 /加辦公室-JS-禁用-html5mode/44858254#44858254。 –

回答

0

縱觀office.js文件的調試版本:

https://appsforoffice.microsoft.com/lib/1/hosted/office.debug.js

你會看到窗口的歷史replaceState和pushState的功能被設置爲空:

window.history.replaceState = null; 
window.history.pushState = null; 

哪禁用操縱瀏覽器歷史記錄的能力,並且似乎Angular認爲歷史API不可用,所以Angular會回退到hashtag導航。

office.js縮小的版本,你可以通過查找發現這兩條線:

window.history.replaceState=e;window.history.pushState=e; 

你可以刪除的代碼來重新啓用html5mode這兩條線,但我不知道,如果辦公室。 js插件將繼續正常工作。

+0

謝謝......我將'office.js'複製到本地,使得'https:// localhost:3000/static/office.js'顯示出好的文件。但加載'addin.html'與新的引用給了我一個控制檯'未捕獲的SyntaxError:意外的令牌<:3000 /靜態/ o15apptofilemappingtable.js:1'錯誤。我總是得到這個錯誤,無論我刪除這兩個'window.history'行... – SoftTimur

+0

看到https://stackoverflow.com/questions/44861833/cannot-load-local-office-js – SoftTimur

相關問題