查看器的 XMLHttpRequest 错误

XMLHttpRequest error for the Viewer

我使用以下 HTML 文件来测试 Autodesk Forge 的 Headless Viewer。测试 url 将如下所示: http://localhost:8080/HeadlessViewer.html?token={{Bearer}}&urn={{base64URN}}

token有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

我试过你的代码只是替换了 "accessToken: <>" 和 "var documentId = <>" 并且工作正常。查看您的代码,我认为问题可能出在以下行:

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

atob函数会解码字符串,意思就是不会在 Base64 上。但是 documentId 应该是这样的:

var documentId = 'urn:c29tZSByYW5kb20gd29yZHMgaGVyZQ==';

请确保 documentId 格式正确。

最后,注意Viewer requires URL Safe encoding. Consider encoding on server (safer to transmit) or doing it on client-side, see this answer