javascript - Azure DevOps WebExtension 使用 WebWorker

标签 javascript azure-devops

我想使用WebWorker里面 WebExtension在 Azure DevOps 服务器上。

处理大型存储库的数据成本很高,所以我想使用WebWorker在后台计算。

但是当我调用new Worker("static/js/WorkerLoadTree.js")时:

//CREATE WORKER
console.log("BEFORE NEW WORKER CALL")
BackgroundWorker = new Worker("static/js/WorkerLoadTree.js");
console.log("AFTER NEW WORKER CALL")

我在 Edge 中看到:

enter image description here

我在 Chrome 中看到了更多详细信息:

VSS.SDK.min.js:2 Rejected XDM promise with no reject callbacks                                                  n._reject @ VSS.SDK.min.js:2
VSS.SDK.min.js:2 DOMException: Failed to construct 'Worker': Script at 'http://136.310.18.216:8070/_apis/public/gallery/publisher/user/extension/SearchRepos/1.0.13/assetbyname/static/js/WorkerLoadTree.js' cannot be accessed from origin 'null'.
    at WorkerStart (http://136.310.18.216:8070/_apis/public/gallery/publisher/user/extension/SearchRepos/1.0.13/assetbyname/static/js/WorkerMain.js:13:32)
    at FillCode (http://136.310.18.216:8070/_apis/public/gallery/publisher/user/extension/SearchRepos/1.0.13/assetbyname/index.html:284:3)
    at http://136.310.18.216:8070/_apis/public/gallery/publisher/user/extension/SearchRepos/1.0.13/assetbyname/index.html:144:6
    at n._wrapCallback (http://136.310.18.216:8070/_apis/public/gallery/publisher/user/extension/SearchRepos/1.0.13/assetbyname/lib/VSS.SDK.min.js:2:951)
    at Array.<anonymous> (http://136.310.18.216:8070/_apis/public/gallery/publisher/user/extension/SearchRepos/1.0.13/assetbyname/lib/VSS.SDK.min.js:2:647)
    at http://136.310.18.216:8070/_apis/public/gallery/publisher/user/extension/SearchRepos/1.0.13/assetbyname/lib/VSS.SDK.min.js:2:1383            n._reject @ VSS.SDK.min.js:2
Failed to load resource: net::ERR_UNEXPECTED                                                            :8070/DefaultCollection/_apis/Contribution/HierarchyQuery/project/09737d31-b39f-49a1-8973-4a702cc4be92:1

加载WorkerLoadTree.js似乎有问题。调用方式是否正确?工作人员如何访问扩展内的 js 文件?

我的扩展文件结构如下所示:

───SearchRepos
    │   icon.png
    │   index.html
    │   SearchRepos-1.0.14.vsix
    │   package-lock.json
    │   package.json
    │   vss-extension.json
    │
    ├───node_modules
    │   └───vss-web-extension-sdk
    │       ...
    │
    └───static
        ├───css
        │       main.css
        │
        ├───js
        │       main.js
        │       WorkerLoadCode.js <- WebWorker
        │       WorkerLoadTree.js <- WebWorker
        │       WorkerMain.js
        │
        ├───lib
        │       jquery-3.4.1.min.js
        │       jstree.js
        │
        └───themes
        ...

元:

Azure DevOps 服务器 17.143.28912.1 (AzureDevOps2019.0.1)

最佳答案

DOMException: Failed to construct 'Worker': Script at 'http://136.310.18.216:8070/_apis/xxxx/static/js/WorkerLoadTree.js' cannot be accessed from origin 'null'.

这是关于跨域访问文件的非常正常的错误。使用 Web Worker 有一个限制:Same Origin Policy 。而且浏览器不允许创建具有指向不同域的 URL 的工作程序。这个“跨域”错误是你的调用方式不正确造成的。

BackgroundWorker = new Worker("static/js/WorkerLoadTree.js");

Chrome 不允许您在从本地 file() 运行脚本时加载 Web Worker,否则错误将如下所示:

enter image description here

注意:我只是在本地计算机上做了一个示例。加载本地文件(即使使用相对 URL)与使用 file: 协议(protocol)加载文件相同。

您应该使用这些文件所在的网络服务器中的 URL,如下所示:http://xxxx:xx/static/js/WorkerLoadTree.js。或者chrome会认为这个本地文件调用方式为跨域使用文件。

关于javascript - Azure DevOps WebExtension 使用 WebWorker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57784495/

相关文章:

javascript - 我如何访问 riot.js 中的子元素

javascript - backbone.js 0.9.2 将具有重复 id 的模型添加到集合中

javascript (reactJS) 访问子数组中的值的最佳方法

azure - 如何在azure Release管道中使用Linux代理运行vstest?

azure-devops - dotnet 构建与在 Azure DevOps 上发布

docker - Azure管道: downloading docker image multiple times

javascript - 如何通过javascript从父类别中获取每个子类别?

javascript - 如何使用 JavaScript 编辑本地 JSON 文件

python - 将迁移作为 Django Web 应用程序的 MS Azure 应用程序服务发布管道的一部分运行

attachment - 如何在 Visual Studio Online 和 C# 中向工作项添加附件