2016-10-03 70 views
0

我使用以下HTML文件測試Autodesk Forge的無頭觀察器。測試網址如下所示: http://localhost:8080/HeadlessViewer.html?token={{Bearer}}&urn={{base64URN}}查看器的XMLHttpRequest錯誤

令牌有scope = data:read,urn是base64格式。

<html> 
<head> 
    <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=no" /> 
</head> 
<body> 
    <div id="MyViewerDiv"></div> 

    <!-- The Viewer JS --> 
    <script src="https://developer.api.autodesk.com/viewingservice/v1/viewers/three.min.js?v=v2.10.*"></script> 
    <script src="https://developer.api.autodesk.com/viewingservice/v1/viewers/viewer3D.js?v=v2.10.*"></script> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> 

    <!-- Developer JS --> 
    <script> 
     function getParameterByName(name, url) { 
      if (!url) url = window.location.href; 
      name = name.replace(/[\[\]]/g, "\\$&"); 
      var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), 
       results = regex.exec(url); 
      if (!results) return null; 
      if (!results[2]) return ''; 
      return decodeURIComponent(results[2].replace(/\+/g, " ")); 
     } 

     function initViewer(token, urn) { 
      var viewerApp; 
      var options = { 
       env: 'AutodeskProduction', 
       accessToken: token 
      }; 

      var documentId = atob(urn); // 'urn:<YOUR_URN_ID>'; 
      Autodesk.Viewing.Initializer(options, onInitialized); 

      function onInitialized() { 
       viewerApp = new Autodesk.Viewing.ViewingApplication('MyViewerDiv'); 
       viewerApp.registerViewer(viewerApp.k3D, Autodesk.Viewing.Viewer3D); 
       viewerApp.loadDocument(documentId, onDocumentLoaded); 
      } 

      function onDocumentLoaded(lmvDoc) { 
       var modelNodes = viewerApp.bubble.search(av.BubbleNode.MODEL_NODE); // 3D designs 
       var sheetNodes = viewerApp.bubble.search(av.BubbleNode.SHEET_NODE); // 2D designs 
       var allNodes = modelNodes.concat(sheetNodes); 
       if (allNodes.length) { 
        viewerApp.selectItem(allNodes[0].data); 
        if (allNodes.length === 1) { 
         alert('This tutorial works best with documents with more than one viewable!'); 
        } 
       } else { 
        alert('There are no viewables for the provided URN!'); 
       } 
      } 
     } 

     $(document).ready(function() { 
      var url = window.location.href, 
       token = getParameterByName('token', url), 
       urn = getParameterByName('urn', url); 
      initViewer(token, urn); 
     }); 
    </script> 
</body> 
</html> 

然而,它停止在異常XMLHttpRequest.responseText。請參閱附件圖片:Error image

+0

你可以在隱身/私人瀏覽器窗口上重試嗎?應該避免本地緩存。此外,除非您有理由,否則請考慮使用viewer3D.min.js(較小) –

+0

我使用隱身模式並具有相同的錯誤。我打算使用viewer3D.js來調試Viewer代碼,以查看這個XMLHttpRequest錯誤發生了什麼。 –

回答

0

我試着用你的代碼替換「accessToken:<>」和「var documentId = <>」,並且工作正常。看你的代碼,我認爲問題可能出在以下行:

var documentId = atob(urn); // 'urn:<YOUR_URN_ID>'; 

atob功能解碼字符串,這意味着它不會對Base64編碼。但documentId應該是這樣的:

var documentId = 'urn:c29tZSByYW5kb20gd29yZHMgaGVyZQ=='; 

請確保documentId適當地形成。

最後,請注意Viewer requires URL Safe encoding。考慮在服務器上進行編碼(更安全地傳輸)或在客戶端進行編碼,see this answer

+0

var documentId ='urn:'+ urn;我不應該解碼字符串,但要保持Base64。這就是XMLHttpRequest無法獲取響應內容的原因。謝謝。 –