【问题标题】:Problems creating Chrome extension that widens margins with keystroke创建通过击键扩大边距的 Chrome 扩展程序的问题
【发布时间】:2014-06-17 18:42:51
【问题描述】:

我敢肯定,有些人可能会告诉我只使用 Stylebot 来更改页面的 CSS 而不是制作我自己的扩展程序,但是 Stylebot 太过分了,因此对于我想做的事情来说太笨重了。每次按Ctrl + M时,我只想将左边距加宽100px。

我认为我有两个关键问题:

  1. 从文档中(对我来说)如何更改 a 边距(而不是设置一个,尽管我尝试这样做 也失败了)。目前还不清楚jquery之类的东西如何 在 this answer 中可以适合 this example 在文档中提供的模板(是的,我已经用 jquery 尝试过 包括作为背景脚本)。
  2. 我感觉也许我应该使用tab chrome.browserAction.onClicked.addListener(function(tab) 但无法从文档中确定如何确定。

这是我尝试过的许多方法的一个版本(在 background.js 中),使用上面链接的 SO 答案中的代码:

chrome.commands.onCommand.addListener(function(command) {
  if (command == "Ctrl+M") { 
    chrome.tabs.executeScript({code: "$('body').css('margin-left', function(index, curValue) {return parseInt(curValue, 10) + 100 + 'px'}"
  });
 }
}); 

如果出现问题,这里是清单:

{
  "name": "MarginAdjust",
  "description": "Widen margins of websites with Ctrl+M, narrow them with Ctrl+B.",
  "version": "0.1",
  "manifest_version": 2,
  "permissions": [
    "activeTab"
  ],
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  "commands": {
    "widen_margin": {
      "suggested_key": {
        "default": "Ctrl+M",
        "mac": "Command+M"
      },
      "description": "Widens margin."
    }
  }
}

感谢您的指导。我什至查看了 Stylebot 源代码,试图了解他们是如何做到的,但无法弄清楚。

编辑:可能是因为我需要一个 content_script 来修改页面,但显然是chrome.commands doesn't work with content_scripts?

【问题讨论】:

    标签: jquery json google-chrome-extension


    【解决方案1】:

    内容脚本将在一个特殊的隔离世界中执行。它可以访问注入网页中的 DOM 节点,并将页面上的 JavaScript 与扩展中的 javascript 完全分离。所以如果你想注入一段代码来使用jQuery库来操作DOM元素,你需要先将jQuery库注入到网页中。

    chrome.tabs.executeScript(null, {file: "jquery.min.js"});
    chrome.tabs.executeScript({code: "$('body').css('margin-left', function(index, curValue) {return parseInt(curValue, 10) + 100 + 'px'});"});
    

    内容脚本注入可以通过 chrome.command 回调触发。 onCommand 回调的第一个参数的值将是您在 manifest.json 中声明的命令名称。您在“suggested_key”中定义的组合键只有在该键尚未分配给另一个命令时才会生效。 “Ctrl + M”似乎不起作用,而“Ctrl+Shift+K”对我有用。

    "commands": {
      "widen_margin": {
        "suggested_key": {
          "default": "Ctrl+Shift+K"
        },
      "description": "Widens margin."
      }
    }
    

    在开发/测试与热键相关的扩展程序时要记住的另一件事是,您需要重新安装扩展程序才能检查更新的命令设置。第一次安装时会采用扩展的命令设置。

    我写了一个简单的例子,你可以参考一下

    ma​​nifest.json

    {
        "name":"MarginAdjust",
        "description": "Widen margins of websites with Ctrl+M, narrow them with Ctrl+B.",
        "version": "1",
        "manifest_version":2,
        "permissions": [
          "activeTab"
        ],
        "background": {
          "scripts": ["background.js"],
          "persistent": false
        },
        "commands": {
          "widen_margin": {
            "suggested_key": {
              "default": "Ctrl+Shift+K"
            },
            "description": "Widens margin."
          }
        }
    }
    

    background.js

    chrome.commands.onCommand.addListener(function(command) {
      alert(command);
      if (command == "widen_margin") { 
        chrome.tabs.executeScript(null, {file: "jquery.min.js"});
        chrome.tabs.executeScript({code: "$('body').css('margin-left', function(index, curValue) {return parseInt(curValue, 10) + 100 + 'px'});"});
      }
    });
    

    【讨论】:

    • 谢谢你,这工作! (我最初遇到了一个错误——我不知道为什么——但后来它起作用了(不是因为我重新加载了文件,因为我已经这样做了)。)除了 jQuery 注入之外,也可能是因为我的if 语句使用 Ctrl+Shift+K 而不是 widen_margin。我不再确定我在哪里看到前者使用过。一个快速的问题:null 在您的第一个 executeScript 中的目的是什么?由于无论如何我都使用该参数的默认值(活动选项卡)并且脚本在没有它的情况下工作,我只是好奇你为什么包含它。
    • 第一个参数代表tabID,它是可选的。如果您只想在活动选项卡上执行内容脚本,则可以忽略它或将 null 传递给它。
    • 明白了。顺便说一句,jquery.min 的注入给我造成了大约 2 秒的延迟时间,所以我决定尝试注入 CSS。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 2022-01-10
    相关资源
    最近更新 更多