我有一个 Azure DevOps 扩展,它添加了一个自定义生成结果选项卡 ( ms.vss-build-web.build-results-tab
)。除了组件的大小之外,一切都工作正常。当页面加载时,我的组件是正确的大小(屏幕的宽度,匹配所有的内置组件)。但是,一旦我调整浏览器窗口的大小,我的组件就会停留在其原始大小。
负载:
调整浏览器大小后:
如果在组件调用之后调用,调用SDK.resize()
似乎没有任何影响。如果我设置了一个断点,调整断点命中的窗口大小,然后手动调用(在我通知完成之前),然后选项卡将调整为屏幕宽度。SDK.notifyLoadSucceeded()
SDK.resize()
出于调试目的,我添加了一个调用SDK.resize()
. 我还尝试向窗口添加调整大小事件处理程序,并从那里调用它。两者都不起作用。
import * as SDK from "azure-devops-extension-sdk";
import * as ReactDOM from "react-dom";
import * as React from "react";
export class BuildResultsTab extends React.Component {
// this is a stripped down version
// component does some loading/processing between
// init and notifyLoadSucceeded
public async componentDidMount() {
SDK.init({loaded: false, applyTheme: true});
debugger; // manually resize browser here
SDK.resize(); // works
SDK.notifyLoadSucceeded();
debugger; // resize browser again
SDK.resize(); // does not seem to work
}
}
ReactDOM.render(<BuildResultsTab />, document.getElementById("report-viewer-container"));
请注意,我的组件本身已设置为填充其容器(请参阅下面的 CSS):
<!-- this is reportViewerTab.html -->
<!DOCTYPE html>
<html lang="en">
<body>
<div id="report-viewer-container" style="padding: 0; position: absolute; top: 0; right: 0; bottom: 0; left: 0"></div>
<script type="text/javascript" src="main.js" charset="utf-8"></script>
</body>
</html>
问题似乎出在容器本身(由 Azure DevOps 控制的容器,我的组件被沙盒化在其中)。当组件首次完成加载时,它iframe
总是有一个静态height
并width
设置它对应于屏幕的大小:
<!-- Note: This is the Azure DevOps controlled container -->
<iframe class="external-content--iframe flex-grow"
role="presentation" frameborder="0"
src="https://myorg.gallerycdn.vsassets.io/extensions/myorg/report-viewer/0.0.1.42923/1637068395422/report-viewer-tab/reportViewerTab.html"
style="height: 565px; width: 871px;"></iframe> <!-- SEE STATIC DIMENSIONS HERE -->
我没有设置这些值,所以它必须是 Azure DevOps 添加它们(我假设是resize
调用的一部分)。同样的事情发生在移动设备上。加载选项卡看起来很棒,但是如果我切换到横向视图,除了我的选项卡之外,所有内容都会调整大小。
我错过了什么吗?有没有办法让我的标签容器随窗口的其余部分一起调整大小?这没什么大不了的,但肯定很烦人。
我正在使用azure-devops-ui
v2.167.21(React 组件)包和azure-devops-extension-sdk
v2.0.11。
这是我的扩展清单的片段,以防万一:
{
"manifestVersion": 1,
// snip
"targets": [{
"id": "Microsoft.VisualStudio.Services"
}],
"scopes": [ "vso.build" ],
// snip
"contributions": [
{
"id": "report-viewer-tab",
"type": "ms.vss-build-web.build-results-tab",
"description": "Report Viewer Tab",
"targets": [
"ms.vss-build-web.build-results-view"
],
"properties": {
"name": "Report Viewer",
"title":"Reports",
"uri": "report-viewer-tab/reportViewerTab.html",
"dynamic": true,
"supportsTasks": ["817c6dfe-0ecf-494b-9b94-0b13bdb7d613"],
"supportsMobile": true
},
"includes": [
"ms.vss-releaseManagement-web.release-service-data-external"
]
}
],
"files": [
// snip... appropriate paths are here
]
}
我还尝试根据在 Github 搜索中找到的一些示例进行设置contributions[0].properties.width
,"100%"
但这似乎没有任何作用。这也是它的dynamic: true
来源,我承认我完全不知道应该做什么——关于这些东西的文档相当缺乏。