我正在编写一个TamperMonkey脚本来调整我不控制的网站的UI,该网站的主布局使用frameset
和frame
元素。
我试图增加其中一个帧集的border
属性,以便更容易调整帧的大小(用鼠标抓取更大的目标(。但是,即使我的脚本将正确的属性设置为所需的值,浏览器也不会更新渲染的帧集,直到出于其他原因(例如更改浏览器窗口大小(必须重新绘制它在我的TamperMonkey脚本中,如何让浏览器在更改帧集的border
属性后立即渲染页面
以下是设置border
属性值的代码片段:
const borderWidth = document.querySelector('html > frameset > frameset')?.attributes?.border;
if (borderWidth) {
borderWidth.value = 10;
}
这正是它应该做的。它成功地定位了正确的帧集元素,并将border
属性设置为10。(通过使用开发工具进行检查来确认。(在控制台中运行它也可以,在element视图中立即更新frameset元素的border
属性。
我发现了一个属性和方法列表;应该";触发回流。我尝试过通过控制台访问frameset
及其子frames
中的offsetWidth
,以及被列为触发回流的各种其他方法,但到目前为止,它们都没有实际导致应用更改后的border
值。
我是否应该以其他方式配置border
值,而不是写入DOM中的属性,以触发回流";自然地";?我是否可以调用API来强制重新绘制框架集边界?
我使用的是铬基Edge,105.0.1343.33。
我通过更新JavaScript向要重新渲染的帧集添加一个空帧元素来强制回流,然后立即删除空帧。这触发了我需要的回流。