打开在我的 chrome 扩展程序之外创建的“封闭”shadowRoot

问题描述 投票:0回答:1

chrome中的谷歌翻译扩展,具有弹出功能,它立即显示所选单词的翻译,我想访问弹出窗口显示的那些翻译,但这个弹出元素是shadowRoot(“关闭”),所以javascript无法访问其内容,我红色一篇关于该主题的文章和作者说:

但实际上没有什么可以阻止某人在组件定义之前执行以下 JavaScript。

Element.prototype._attachShadow = Element.prototype.attachShadow; Element.prototype.attachShadow = function () { return this._attachShadow( { mode: "open" } ); };

是否可以更改其他扩展的attachShadow方法?如果是这样,我的扩展应该在哪里执行它? background_script 或者也许在某个地方。我认为每个扩展都有自己的环境,我没有机会编辑它们的方法。我希望我错了:)

javascript google-chrome-extension shadow-dom
1个回答
6
投票

无需覆盖它。
内容脚本中有一个特殊的方法。

  • Chrome 88+

    let shadowRoot = chrome.dom.openOrClosedShadowRoot(element);
    
  • Firefox 63

    let shadowRoot = element.openOrClosedShadowRoot();
    
  • 综合:

    let shadowRoot = chrome.dom?.openOrClosedShadowRoot(element)
      || element.openOrClosedShadowRoot();
    
© www.soinside.com 2019 - 2024. All rights reserved.