使用扩展弹出窗口中的按钮更改 DOM 的 Chrome 扩展

Posted

技术标签:

【中文标题】使用扩展弹出窗口中的按钮更改 DOM 的 Chrome 扩展【英文标题】:Chrome extension to change DOM with a button in extension popup 【发布时间】:2016-11-28 09:43:21 【问题描述】:

我对 chrome 扩展开发完全陌生。 单击扩展弹出窗口中的按钮时,我正在尝试更改 DOM(将数据附加到活动网页)。这怎么可能。

清单文件


  "manifest_version": 2,

  "name": "test 2",
  "description": "test ext 2",
  "version": "1.0",

  "browser_action": 
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  ,
  "content_scripts": [
    
      "matches": ["http://*/*","https://*/*"],
      "js": ["jquery.min.js", "main.js"]
    
  ],
  "permissions": [
   "activeTab"
   ]

假设popup.html文件是

<!doctype html>
<html>
  <head>
    <title>test extension 2</title>
    <script src="popup.js"></script>
  </head>
  <body>
    <a id="button">button</a>
  </body>
</html>

当我单击#button 时,我想在 main.js 文件中执行一些 jquery 代码,它将一些数据附加到活动网页。

谢谢。

【问题讨论】:

Chrome Extension - Message Passing from Popup to Content Script的可能重复 @HibaraAi 如果我的问题以这样的重复而结束,我不知道该怎么办。这只是解决方案的一小部分。 感谢您提供的链接。它有助于获得一个想法,但现在我希望在 popup.html 中合并一个按钮并添加一个侦听器,该侦听器将更改活动页面的 DOM。我正在寻找这样的东西,link 【参考方案1】:

    使用Programmatic injection。您可以在 popup.js 中注册事件侦听器并调用 chrome.tabs.executeScript 将一些 js 代码/文件注入当前活动选项卡。这需要主机权限。

    popup.js

    document.getElementById('button').addEventListener('click', function() 
        chrome.tabs.query( active: true, currentWindow: true, function(activeTabs) 
            // WAY 1
            chrome.tabs.executeScript(activeTabs[0].id,  code: 'YOUR CODE HERE' );
        );
    );
    

    使用Message Passing。您可以在 popup.js 中调用 chrome.tabs.sendMessage 并通过 content.js 中的 chrome.runtime.onMessage 收听。

    popup.js

    // WAY 2 (Replace WAY1 with following line)
    chrome.tabs.sendMessage(activeTabs[0].id,  action: 'executeCode' );
    

    content.js

    chrome.runtime.onMessage.addListener(function(request) 
        if(request.action === 'executeCode') 
            // YOUR CODE HERE
        
    );
    

    使用Storage。您可以在 popup.js 中调用 chrome.storage.local.set 并通过 chrome.storage.onChanged 监听 content.js 中的存储变化。

    popup.js

    // WAY 3 (Replace WAY1 with following line)
    chrome.storage.local.set( action: 'executeCode' );
    

    content.js

    chrome.storage.onChanged.addListener(function(changes) 
        var action = changes['action'];
        if(action.newValue === 'executeCode') 
            // YOUR CODE HERE
        
    );
    

【讨论】:

谢谢灰原。我检查了一些文件。但我没有得到正确的想法,但这有帮助

以上是关于使用扩展弹出窗口中的按钮更改 DOM 的 Chrome 扩展的主要内容,如果未能解决你的问题,请参考以下文章

获悉点击了弹出窗口中的哪个按钮

Chrome扩展弹出窗口中的表单帖子没有做任何事情

在 Kendo Ui Grid 弹出窗口中更改按钮文本

如何访问网页 DOM 而不是扩展页面 DOM?

UWP - Flyout中的WinRT xaml工具包TreeView,在弹出窗口关闭后更改选择

python中的Kivy弹出窗口,按钮上有多个on_release操作