chrome扩展开发之旅 第三篇

news/2023/12/9 16:38:54

第三章目录

  • 3.1 CSS简述

  • 3.2 Browser Actions

  • 3.3 右键菜单

  • 3.4 桌面提醒

  • 3.5 omnibox

  • 3.6 Page Actions

3.1 CSS简述

这部分对于前端的人来说是基础。就不说了

3.2 Browser Action

图标设置

chrome一般会选择19像素的图片显示在工具栏,但若用户使用视网膜屏幕的计算机,chrome则会选择38像
素的图片。两种图片并非都要指定,指定一个,浏览器页会自动拉伸图片适应显示需要,但是可能会很难看。

  "browser_action": {
      "default_icon": {
          "19": "images/icon19_0.png",  //键值名19与38并不指代像素,只是作者自己为了标示
          "38": "images/icon38_0.png"   //chrome会自动识别像素,并予以选用
      }
    }

动态更改图标的方法
chrome.browserAction.setIcon(details,callback)

details的类型为对象,可以包含以下三种属性,分别是imagesData,path和tabId。

  • imagesData说明
    imagesData的值既可以是imagesData也可以是对象。

{size:imagesData}
imagesData是指图片的像素数据,可以通过HTML的canvas标签获取。

  • path说明
    path的值既可以是字符串也可以是对象,如果是对象,结构为{size:imagePath}

  • tabId说明
    tabId的值限定了图标将在浏览哪个标签页时被更改。

  • callback回调函数没有可接收的结果

popup页面

当用户点击扩展图标时,弹出的页面被成为popup页面。

popup页面更多的用来展示结构,而并非处理数据。因为关闭popup页面等于关闭了相应的标签页。页面不会
继续运行,等再次打开popup页面时,所有的Dom与js空间遍历都会重新创建。

如果需要实时处理数据,则需要创建一个在后端一直运行的页面或者脚本(同时记得在manifest.json的
background域来声明)

几个注意项:

  • 给出页面尺寸

  • 不要模仿Chrome的原生UI

  • 使用带有滚动条的DIV容器

  • 设计一个更好的滚动条样式

  • 屏蔽右键菜单

  • 使用外部引用脚本

  • 不要在popup页面的js空间变量中保存数据

标题和badge

将鼠标移至扩展图片上,等待片刻就会显示扩展的title。
设置方式如下

  "browser_action": {
      "default_title": "Turtle"
  },

动态设置方法

chrome.browserAction.setTitle({title: 'This is a new title'});

badge常用来显示我们未阅读的数量等等,比如邮件,微博等。

设置方式

  chrome.browserAction.setBadgeBackgroundColor({color: '#0000ff'});
  chrome.browserAction.setBadgeText({text: 'dog'});

注:背景颜色也可以用使用rgba。

2.3 右键菜单

首先,在manifest.json中的permissions域中声明contextMenus权限。

  "permissions": [
    "contextMenus"
  ]

第二步,设置右键菜单项上显示的扩展图标

  "icon": {
    "16": "icon16.png"
  }

三种操作方法:

  • chrome.contextMenus.create()

  • chrome.contextMenus.update()

  • chrome.contextMenus.remove()
    举例如下:

      chrome.contextMenus.create({
        type: 'normal',  //类型有normal,radio,checkbox,separator
        title: 'menu A',
        id: 'a', //标识每个选项
        parentId: 'e',  //标示父级选项
        contexts: ['link'] //完整的取值还有all,page,frame,selection,link,editable,
                           //image,video,audio,launcher。表示右键菜单显示的时机
        });
    

update可以动态更改菜单属性,只需要指定需要更改的菜单id和所需要修改的属性即可,remove方法可以删
除指定的菜单栏选项。

3.4 桌面提醒

manifest部分

  "permissions": [
    "notifications"
  ];//manifest.json中声明
  "web_accessible_resources": [
  "icon48.png"
  ]  //对于桌面窗口中显示的图片,需要先行声明

js部分

  var notification = webkitNotiofications.createNotiofication(
    'icon48.png',
    'Notiofication Demo',
    'Merry Christmas'
    ); //建立一个提醒
  notification.show();//创建之后不会立即显示,需要调用show

4种事件

  • ondisplay

  • onerror

  • onclose

  • onclick
    除此之外,还可以通过notification.cancel()主动关闭提醒窗口

omnibox

什么是omnibox呢,就是chrome 的地址栏,其实这是一个多功能输入框,google称之为omnibox。Google
已经将omnibox的权限开放了。

"omnibox": { "keyword": "hamster"} //首先在manifest.json声明并指定keyword

omnibox有4种事件

  • chrome.omnibox.onInputStarted

  • chrome.omnibox.onInputChanged

  • chrome.omnibox.onInputEntered

  • chrome.omnibox.onInputCancelled

Page Actions

Page Actions 与BrowserAction非常相似,除了没有badge意外,后者拥有的方法前者都有。另一个区别
在于,前者图标并非一直显示。所有前者可以自由控制显示或者隐藏,如下。

  chrome.pageAction.show(tabId);
  chrome.pageAction.hide(tabId);

制作实时查询美元价格的扩展

js代码部分

  function httpRequest(url, callback){
      var xhr = new XMLHttpRequest();
      xhr.open("GET", url, true);
      xhr.onreadystatechange = function() {
          if (xhr.readyState == 4) {
              callback(xhr.responseText);
          }
      }
      xhr.send();
  }

  function updateAmount(amount, exchange){
      amount = Number(amount);
      if(isNaN(amount) || !amount){
          exchange([{
              'content': '$1 = ¥'+price,
              'description': '$1 = ¥'+price
          },{
              'content': '¥1 = $'+(1/price).toFixed(6),
              'description': '¥1 = $'+(1/price).toFixed(6)
          }]);
      }
      else{
          exchange([{
              'content': '$'+amount+' = ¥'+(amount*price).toFixed(2),
              'description': '$'+amount+' = ¥'+(amount*price).toFixed(2)
          },{
              'content': '¥'+amount+' = $'+(amount/price).toFixed(6),
              'description': '¥'+amount+' = $'+(amount/price).toFixed(6)
          }]);
      }
  }

  function gotoYahoo(text, disposition){
      window.open('http://finance.yahoo.com/q?s=USDCNY=X');
  }

  var url = 'http://query.yahooapis.com/v1/public/yql?q=select%20Rate%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22USDCNY%22)&env=store://datatables.org/alltableswithkeys&format=json';
  var price;

  httpRequest(url, function(r){
      price = JSON.parse(r);
      price = price.query.results.rate.Rate;
      price = Number(price);
  });

  chrome.omnibox.setDefaultSuggestion({'description':'Find current USD price.'});

  chrome.omnibox.onInputChanged.addListener(updateAmount);

  chrome.omnibox.onInputEntered.addListener(gotoYahoo);

manifest部分

  {
      "manifest_version": 2,
      "name": "USD Price",
      "version": "1.0",
      "description": "查询美元当日价格",
      "background": {
          "scripts": [
              "js/background.js"
          ]
      },
      "icons": {
          "16": "images/icon16.png"
      },
      "omnibox": {
          "keyword": "usd"
      },
      "permissions": [
          "*://query.yahooapis.com/*"
      ]
  }

图片请自行选用。
扩展使用方法:载入扩展之后,在浏览器地址栏输入"usd",然后按空格键或者Tab键就可以使用了。


http://www.niftyadmin.cn/n/2044812.html

相关文章

李宏毅机器学习作业2-使用逻辑回归对人员按收入分类

说明 本代码实现尚有很大不足,最终分类的正确率仅能达到78.25%,且迭代次数过多(100次) 或 不对数据进行任何处理 或 将所有特征均用minmax的方法归一化 的情况下,都会导致测试集的所有分类均为0,原因尚不明…

jQuery 可拖拽进度条

2019独角兽企业重金招聘Python工程师标准>>> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"…

反向传播(Backpropagation)

前言 由于个人理解能力有限&#xff0c;我看了好几遍李宏毅老师的推导才大致理解&#xff0c;如有错误之处恳请指正。 梯度与传播的关系 前面已经使用泰勒展开推导过损失函数值沿变量梯度的反方向下降最快的结论&#xff0c;考虑如下的网络结构 其中xnx_nxn​代表输入的特征…

授权(Authorization)

介绍 除了认证服务&#xff0c;laravel还提供了授权服务&#xff0c;laravel同样提供了一个简单的方式去组织授权的逻辑来控制资源的访问.我们提供了各种各样的方法协助你们组织授权的逻辑&#xff0c;这些都在下面的文档之中。 定义能力 如果用户想要执行某个动作并使用能力&a…

XNA游戏编程 学习备忘

Matrix.CreateFromYawPitchRoll&#xff08; float yaw,//Yfloat pitch,//Xfloat roll//Z&#xff09;我想知道旋转次序是什么&#xff0c;但是在msdn上没有找到说明。于是试验了一下&#xff0c;得到的经验是先绕Z轴转&#xff0c;再绕X轴转&#xff0c;最后绕Y轴转。Matrix.C…

用一个简单的神经网络实现异或功能

前言 前面学到&#xff0c;单层的逻辑回归模型无法解决线性不可分的问题&#xff0c;因此可以使用多层神经网络模型&#xff0c;其中神经网络的隐藏层可以被理解为用来将线性不可分的数据变为线性可分。 李弘毅老师的机器学习课程在讲完反向传播后就直接开始讲keras的使用了&a…

梯度消失问题(vanishing gradient problem)

tips 梯度消失的原因是使用了sigmoid作为激活函数sigmoid函数将很大范围的数对应的输出都映射到了0和1之间&#xff0c;这导致前向计算每个结点的值时&#xff0c;即使是一个很大的输入&#xff0c;经过一次sigmoid函数的变换&#xff0c;都会变成0到1之间的数&#xff0c;如此…

Visual C++ 2010 glut 配置 win7 32位

配置 我的win7 32位系统&#xff0c;opengl32.dll与glu32.dll已位于C:\Windows\System32之下。安装好Visual C 2010后&#xff0c;相应的头文件&#xff08;gl.h和glu.h)及库文件&#xff08;opengl32.lib和glu32.lib)分别在C:\Program Files\Microsoft SDKs\Windows\v7.0A\&a…

POJ1125 动态规划求解多源最短路——Floyd算法

POJ1125 动态规划求解多源最短路——Floyd算法 目的 计算非负权值有向图任意两点的最短路径&#xff0c;可以处理环的问题 题目分析 http://poj.org/problem?id1125 典型的多源最短路问题&#xff0c;思想&#xff1a;https://blog.csdn.net/qq_40859951/article/details…

矩阵的内积、外积

矩阵外积 矩阵外积也就是矩阵的乘积&#xff0c;ABABAB 和BABABA 结果不一定相乘&#xff0c;且前面可乘不代表后面可乘。 要求AAA的列等于BBB 的行的两个矩阵才可以做外积&#xff0c;外积乘法规则是&#xff1a;AAA 的行乘以BBB 的列&#xff0c;结果仍为矩阵。 例如&#x…

包含路径(include path) 库路径(lib path)(附加)包含目录 (附加)库目录

以VC2010为例&#xff0c;项目属性设置有很多&#xff0c;如果有什么不明白的&#xff0c;单击选择项目属性窗口的某一项设置&#xff0c;按F1&#xff08;或者单击窗口的帮助按钮&#xff09;&#xff0c;就可以在msdn上看到相关解释了&#xff08;使用联机帮助的话&#xff0…

phantomjs iframe 访问元素

2019独角兽企业重金招聘Python工程师标准>>> 执行参数&#xff1a;phantomjs --web-securityno xxx.jsvar content page.evaluate(function() {return $("iframe:first").contents().find("#ptlogin_iframe").contents().find("#switcher…

POJ1094拓扑排序

POJ1094拓扑排序 题目分析 http://poj.org/problem?id1094 本题给出AOV活动网络的一个拓扑排序问题&#xff0c;要求给出&#xff1a;唯一的一个拓扑序列 || 拓扑序列不唯一 || 不存在拓扑序列&#xff0c;并指出使用了所有关系中的前几个得到了以上三个结论中的一个 拓扑…

Problem A: 走道铺砖[减弱版]

Problem A: 走道铺砖[减弱版] Description 有一个m行n列的矩阵&#xff0c;用1*2的骨牌(可横放或竖放)完全覆盖&#xff0c;骨牌不能重叠&#xff0c;有多少种不同的覆盖的方法&#xff1f;你只 需要求出覆盖方法总数的值即可。 Input 三个整数数n,m n<10 Output 一…

卷积神经网络(Convolutional Neural Network, CNN)

为什么使用卷积神经网络 CNN通常用于图像的识别上。 关于为什么要在图像识别上使用CNN&#xff08;为什么可以用较少的参数来做影像处理这件事&#xff09;&#xff0c;其原因大致有以下三条&#xff1a; 神经网络中隐藏层的某个神经元的作用是识别图片的某部分&#xff0c;因…

【PDO扩展】lastInsertId函数返回0的原因

原文地址 : http://www.hoohack.me/2016/01/19/the-reason-why-lastInsertId-return-0/ 问题 在使用PHP的PDO扩展插入数据的时候&#xff0c;有时候需要获取到最后插入记录的ID作为返回信息。要怎么才能实现这个需求呢&#xff1f; lastInsertId函数 使用PDO的lastInsertId函数…
最新文章