You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Edge 143+中Azure DevOps仪表板小部件触发ERR_BLOCKED_BY_LOCAL_NETWORK_ACCESS_CHECKS错误的问题求助

Edge 143+中Azure DevOps仪表板小部件触发ERR_BLOCKED_BY_LOCAL_NETWORK_ACCESS_CHECKS错误的问题求助

我正在开发一款Azure DevOps仪表板小部件,原本可以正常通过ADO API获取流水线信息,但从12月9日(Edge 143+在12月4日推送更新之后)开始,突然遇到了跨域阻塞问题,卡了好几天没解决,来求助大家!

我要调用的目标API是:

GET https://dev.azure.com/{org}/{project}/_apis/build/builds
  ?definitions=123
  &top=10
  &statusFilter=completed
  &api-version=7.1

具体错误信息

跨域策略拦截提示:

Access to fetch at 'https://dev.azure.com/...' from origin 'https://[publisher].gallerycdn.vsassets.io' has been blocked by CORS policy:
Permission was denied for this request to access the unknown address space.

控制台输出的错误代码:

ERR_BLOCKED_BY_LOCAL_NETWORK_ACCESS_CHECKS

我的开发情况

这个小部件是严格按照微软官方文档开发的(文档发布时间远早于这次Edge更新),核心逻辑是用azure-devops-extension-sdk和官方API客户端请求数据,代码结构如下:

import * as SDK from "azure-devops-extension-sdk";
import { getClient } from "azure-devops-extension-api";
import { BuildRestClient } from "azure-devops-extension-api/Build";

class XWidget extends React.Component {
  async componentDidMount() {
    await SDK.init();
    await SDK.ready();
   
    const buildClient = getClient(BuildRestClient);
   
    // 就是这行代码在Edge 143+里触发ERR_BLOCKED_BY_LOCAL_NETWORK_ACCESS_CHECKS错误
    const builds = await buildClient.getBuilds(
      projectName,
      [pipelineId],
      null, null, null, null, null, null, null, null, null, null, 10
    );
   
    this.setState({ builds });
  }
}

对应的扩展清单文件(vss-extension.json)也完全符合官方要求:

{
  "manifestVersion": 1,
  "id": "Xwidget",
  "version": "0.14.0",
  "name": "XWidget",
  "scopes": [
    "vso.build",
    "vso.build_execute",
    "vso.project",
    "vso.work",
    "vso.dashboards"
  ],
  "contributions": [
    {
      "id": "XWidget",
      "type": "ms.vss-dashboards-web.widget",
      "targets": ["ms.vss-dashboards-web.widget-catalog"],
      "properties": {
        "name": "X Pipeline Status",
        "description": "Monitor X pipeline runs",
        "uri": "dist/widget.html",
        "supportedSizes": [{ "rowSpan": 2, "columnSpan": 2 }],
        "supportedScopes": ["project_team"]
      }
    }
  ]
}

已尝试的方案

  1. 试过azure-devops-extension-api里的所有相关客户端(Build、Core、WorkItemTracking),想找官方提供的变通方案,但没有收获;
  2. 也尝试过直接用原生fetch API请求,结果和用官方客户端完全一样,还是被拦截;
  3. 没法搭建后端或者Azure函数转发请求,因为公司管理层不允许这种方案。

另外这个问题只出现在Chrome和Edge 143+里,Firefox下完全正常,这也让我更加困惑...

几个核心疑问

  • 有没有我漏掉的Azure DevOps Extension SDK客户端侧变通方案?
  • 微软有没有确认Edge 143+这次更新破坏了Azure DevOps扩展的问题?我翻了官方文档和bug库都没找到相关信息;
  • 为什么官方的小部件开发指南里没提到这个问题?指南里用的就是我现在的代码模式啊;
  • Azure DevOps团队有没有计划给API添加Access-Control-Allow-Private-Network: true响应头来解决这个问题?
  • 生产环境下的小部件有什么合规的解决方案?我总不能要求所有用户都切换到Firefox或者修改Edge企业策略吧;
  • 有没有其他开发者遇到过同样的问题?或者知道Azure Marketplace里的小部件是怎么规避这个问题的?

我已经在微软开发者社区发了求助帖但还没收到回复,真心希望能得到大家的帮助,谢谢各位了!

火山引擎 最新活动