javascript - 在 chrome 中打开其他扩展插入的元素的 "closed"shadowRoot

标签 javascript google-chrome-extension shadow-dom

Chrome 中的谷歌翻译扩展,具有弹出功能,它会立即显示所选单词的翻译,我想访问弹出显示的那些翻译,但是这个弹出元素是 shadowRoot("closed"),所以 javascript 无法访问它的内容,我写了一篇关于该主题的文章,作者说:

But really there is nothing stopping someone executing the following JavaScript before your component definition. Element.prototype._attachShadow = Element.prototype.attachShadow; Element.prototype.attachShadow = function () { return this._attachShadow( { mode: "open" } ); };

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

最佳答案

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

  • Chrome 88+ :

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

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

    let shadowRoot = chrome.dom?.openOrClosedShadowRoot(element)
      || element.openOrClosedShadowRoot();
    

关于javascript - 在 chrome 中打开其他扩展插入的元素的 "closed"shadowRoot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70489914/

相关文章:

css - 样式化自定义 HTML 元素

javascript - 简单的 JavaScript 密码保护不适用于移动平台

javascript - 在 phantomJS 中使用 angularJS 函数

javascript - Chrome.runtime.onMessage 无法将消息从弹出窗口发送到内容脚本

javascript - 从 Chrome 扩展程序中的内容脚本获取 "this"选项卡 ID?

css - 像 normalize.css 这样的 CSS 重置会传播到 shadow dom 吗?

javascript - 扩展 <选项>

javascript - 揭示原型(prototype)模式不适用于 Array

javascript - 访问者如何通过文本字段向菜单添加选项?

google-chrome-extension - 您如何使用 list v3 在 chrome 扩展中进行定期后台工作