Chrome扩展上下文菜单:单击菜单项后如何将div附加到页面

蜜雪儿

尝试构建Chrome扩展程序。目前,我已经整理了一个上下文菜单项。单击上下文菜单项后,它将itemClicked()在我的背景脚本中触发context_menu.js

function itemClicked(info, tab) {
     alert("clicked");
}

警报触发。我也可以做一些事情,例如通过发送ajax请求itemClicked()

但是,我不能将任何元素附加到页面上(或任何形式的DOM操作)。甚至像这样基本的东西都行不通:

  var d = document.createElement('div');
  d.setAttribute("css", "width: 100px; height: 100px; background-color: red; position: fixed; top: 70px; left: 30px; z-index: 99999999999;");
  document.body.appendChild(d); 

因此,我尝试将相同的代码添加到内容脚本中:

chrome.contextMenus.onClicked.addListener(function(OnClickData info, tabs.Tab tab) {
  //code to append the input here
});

但这仍然行不通。我究竟做错了什么?

单击后如何获取上下文菜单以将某些内容添加到页面?

非常感谢!

编辑:这是我的manifest.json(删除了不相关的名称/描述等内容)

{


  "permissions": [
    "activeTab",        
    "tabs",
    "cookies",
    "contextMenus"
  ],

  "background": {
    "scripts": ["context_menu.js"]
  },
  "browser_action": {
    "default_icon": "icon16.png",
    "default_css": "popup.css",
    "default_popup": "popup.html"
  },

  "content_scripts": [
    {      
      "matches": ["<all_urls>"],
      "js": ["vendor/jquery-1.8.2.min.js", "config.js", "content_script.js"]   
    }
  ],

  "web_accessible_resources": ["popup.html"]

}
加尔帕克

您可能误解了背景页面(及其更年轻,更资源友好且更可取的同级对象:事件页面)和内容脚本的概念

内容脚本

  • 绑定到加载到选项卡中的特定网页。
  • 生活在一个孤立的世界(JS上下文)中,但是可以直接访问网页DOM。
  • 可以与后台页面进行通信(请参阅消息传递)。

背景页面

  • 绑定到您的扩展程序(每个扩展程序最多有1个背景(或事件)页面)。
  • 始终位于后台某处(事件页面有时会“小睡”,但您始终可以将其唤醒)。
  • 没有直接访问任何网页。
  • 可以与内容脚本(和其他视图)进行通信(请参阅消息传递)。
  • 可以做一些很酷的事情(因为他们可以使用酷炫的chrome。* API)。

chrome.contentMenus API仅适用于一个背景页。因此,您必须创建任何上下文菜单并在其中侦听onClicked事件(在后台页面中)。
单击上下文菜单后,您可以使用Programmatic Injection将一些代码(或内容脚本)注入活动选项卡的网页。

下面是演示此方法的示例扩展的源代码。

manifest.json:

{
    "manifest_version": 2,
    "name":    "Test Extension",
    "version": "0.0",

    "background": {
        "persistent": false,   // <-- let's make it an event page
        "scripts": ["background.js"]
    },

    "permissions": [
        "contextMenus",
        "activeTab"   // <-- here, sufficient for our purpose
    ]
}

background.js:

/* Create a context-menu */
chrome.contextMenus.create({
    id: "myContextMenu",   // <-- mandatory with event-pages
    title: "Click me",
    contexts: ["all"]
});

/* Register a listener for the `onClicked` event */
chrome.contextMenus.onClicked.addListener(function(info, tab) {
    if (tab) {
        /* Create the code to be injected */
        var code = [
            'var d = document.createElement("div");',
            'd.setAttribute("style", "'
                + 'background-color: red; '
                + 'width: 100px; '
                + 'height: 100px; '
                + 'position: fixed; '
                + 'top: 70px; '
                + 'left: 30px; '
                + 'z-index: 9999; '
                + '");',
            'document.body.appendChild(d);'
        ].join("\n");

        /* Inject the code into the current tab */
        chrome.tabs.executeScript(tab.id, { code: code });
    }
});

(如果注入的代码足够复杂,则注入.js文件可能是一个更好的主意。有关Programmatic Injection的更多信息。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将上下文菜单项添加到Chrome扩展程序的浏览器操作按钮

来自分类Dev

Devexpress gridView上下文菜单项单击

来自分类Dev

将上下文菜单项添加到特定的文件扩展名

来自分类Dev

Chrome扩展程序中的分组上下文菜单项

来自分类Dev

Chrome扩展程序,自定义上下文菜单项未显示

来自分类Dev

如何禁用Excel上下文菜单项

来自分类Dev

如何在Windows 7中将图标添加到自定义上下文菜单项?

来自分类Dev

图片框单击事件在图片框的上下文菜单菜单项单击之前触发

来自分类Dev

如何创建将多个文件作为参数的Shell上下文菜单项?

来自分类Dev

jQuery上下文菜单ajax获取菜单项

来自分类Dev

jQuery将多余的菜单项附加到div

来自分类Dev

如何在Delphi的IDE上下文菜单中添加菜单项

来自分类Dev

如何根据条件在WPF XAML中隐藏上下文菜单的菜单项

来自分类Dev

如何在上下文菜单中添加“打开链接”菜单项

来自分类Dev

如何使用 p:fileUpload 作为 primefaces 上下文菜单的菜单项?

来自分类Dev

在20.04中将键盘快捷方式添加到Gnome文件上下文菜单项

来自分类Dev

Chrome扩展程序-特定页面上的上下文菜单

来自分类Dev

如何将上下文菜单添加到带有Chrome扩展程序的浏览器操作中?

来自分类Dev

如何将上下文菜单添加到带有Chrome扩展程序的浏览器操作中?

来自分类Dev

在WPF中使用单击处理程序动态添加上下文菜单项

来自分类Dev

jQuery上下文菜单项仅在文本上单击

来自分类Dev

Firefox上下文菜单项覆盖:为什么显示每个菜单项?

来自分类Dev

STS 3.6.2消失的上下文菜单项

来自分类Dev

Java Fx TreeTableView不同的上下文菜单项

来自分类Dev

Java Fx TreeTableView不同的上下文菜单项

来自分类Dev

Windows 10中的空白上下文菜单项

来自分类Dev

FFmpeg通过上下文菜单项转换

来自分类Dev

上下文菜单项不会触发 Click 事件

来自分类Dev

将上下文菜单项添加到TextEditor

Related 相关文章

  1. 1

    将上下文菜单项添加到Chrome扩展程序的浏览器操作按钮

  2. 2

    Devexpress gridView上下文菜单项单击

  3. 3

    将上下文菜单项添加到特定的文件扩展名

  4. 4

    Chrome扩展程序中的分组上下文菜单项

  5. 5

    Chrome扩展程序,自定义上下文菜单项未显示

  6. 6

    如何禁用Excel上下文菜单项

  7. 7

    如何在Windows 7中将图标添加到自定义上下文菜单项?

  8. 8

    图片框单击事件在图片框的上下文菜单菜单项单击之前触发

  9. 9

    如何创建将多个文件作为参数的Shell上下文菜单项?

  10. 10

    jQuery上下文菜单ajax获取菜单项

  11. 11

    jQuery将多余的菜单项附加到div

  12. 12

    如何在Delphi的IDE上下文菜单中添加菜单项

  13. 13

    如何根据条件在WPF XAML中隐藏上下文菜单的菜单项

  14. 14

    如何在上下文菜单中添加“打开链接”菜单项

  15. 15

    如何使用 p:fileUpload 作为 primefaces 上下文菜单的菜单项?

  16. 16

    在20.04中将键盘快捷方式添加到Gnome文件上下文菜单项

  17. 17

    Chrome扩展程序-特定页面上的上下文菜单

  18. 18

    如何将上下文菜单添加到带有Chrome扩展程序的浏览器操作中?

  19. 19

    如何将上下文菜单添加到带有Chrome扩展程序的浏览器操作中?

  20. 20

    在WPF中使用单击处理程序动态添加上下文菜单项

  21. 21

    jQuery上下文菜单项仅在文本上单击

  22. 22

    Firefox上下文菜单项覆盖:为什么显示每个菜单项?

  23. 23

    STS 3.6.2消失的上下文菜单项

  24. 24

    Java Fx TreeTableView不同的上下文菜单项

  25. 25

    Java Fx TreeTableView不同的上下文菜单项

  26. 26

    Windows 10中的空白上下文菜单项

  27. 27

    FFmpeg通过上下文菜单项转换

  28. 28

    上下文菜单项不会触发 Click 事件

  29. 29

    将上下文菜单项添加到TextEditor

热门标签

归档