【问题标题】:Changing a html page on the fly using chrome extension使用 chrome 扩展动态更改 html 页面
【发布时间】:2018-04-02 16:06:50
【问题描述】:

我正在尝试更改 DOM img 对象的图像 src,但是在尝试使用 chrome 扩展更改图像时,我遇到了图像闪烁的问题。

manifest.json

  "content_scripts": [{
  "js": ["./js/content.js"],
  "matches": ["*://example.com/*"],
  "run_at": "document_start"
}

content.js

var img = 'data:image/png;base64,.....'
var avatar = (document.getElementsByClassName('page_avatar_img'))[0];
avatar.src = img;

在这种情况下,扩展程序会等待创建 DOM 对象,然后才会将原始图像替换为我的 img 并闪烁。

我可以在创建 DOM 对象之前更改 html 文档的文本以避免这种情况并立即创建我需要的对象吗?

在 manifest.json 中的“document_start”上更改“run_at”对我没有帮助,因为 chrome 扩展找不到“头像”对象。

感谢大家的解答!

【问题讨论】:

标签: javascript html dom google-chrome-extension


【解决方案1】:

你应该看看chrome.webRequest

将以下代码添加到您的manifest.json

{
    "name": "My extension",
    ...
    "permissions": [
      "<all_urls>",
      "webRequest",
      "webRequestBlocking"
    ],
    ...
  }

然后在background.js添加事件监听器:

chrome.webRequest.onBeforeRequest.addListener(
    function(details) {

      // some logic on change `details.url` to modified_url  

      return {redirectUrl: modified_url};
    },
    {urls: ["<all_urls>"]},
    ["blocking"]);

别忘了还要在清单文件中指定您的 background.js

"background": {
   "scripts": ["./background.js"],
   "persistent": true
}

【讨论】:

  • 这似乎与问题关系不大。
  • @Makyen,也许可以,但这解决了替换图像 src 的特定问题并消除了闪烁。
  • 请在您的回答中提供更多解释性文字。我不清楚这就是你试图完成的事情。还请说明这需要在请求之前知道原始图像的 URL,而不仅仅是元素的 class。询问 OP 是否要总是 替换每一页中的资源,或者只替换一页中的资源,这会有所帮助。提到这种方法会为 每个 webRequest 增加大量开销将是一个好主意。还有一次,从 OP 那里得到澄清,即问题符合解决方案所需的标准会很好。
  • 虽然这对于非常具体的问题子集可能是一种可行的方法,但没有解释和重要的附加代码,这可能会脱离上下文,这可能会导致程序员和用户的其他问题。
  • @Makyen,你是对的。稍后我会澄清我的答案。感谢您的评价。
猜你喜欢
  • 1970-01-01
  • 2012-01-10
  • 2012-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-05
  • 1970-01-01
相关资源
最近更新 更多