2016-10-03 91 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无法获取响应内容的原因。谢谢。 –