知音漫客,谷歌(Google)Chrome浏览器扩充程序开辟小记

  依据店家的显著,每月八钟头,弹性职业制。所以大家日常来的不太准时,若是有事,下班也就早些回去了。所以三个月下来工时只怕相当不足,可是厂商的考核日历是那般的:

GoogleChrome浏览器扩充程序开拓小记,chrome程序支付

  依据集团的规定,每月八钟头,弹性职业制。所以大家常常来的不太准时,要是有事,下班也就早些回去了。所以三个月下来工作时间大概不够,不过公司的考核日历是这么的:

澳门葡京 1

而外请假和合法节日外,别的样式突显都以一模一样的,每一回都要叁个个揣测前段时期的差相当少工时,十二分不便利。后来收看集团有人在用三个Chrome扩充程序,能够测算出一个月的做事时间,可是小编感觉照旧尚未观察自家想看的东西,因为除此而外各类月的一同工作时间外,作者还想见到:平均天天劳作时长、每天的干活时间长度、20点今后的时局(20点以往下班的能够报废晚饭的,哈哈……)、22点过后下班的运气(报废打车费)……所以作者主宰依旧友好写贰个呢。

  第一步,笔者先写了一个JS方法,然后通过F12开荒者工具的Console复制粘贴运维。

  公司用的OA系统未有援用jQuery库,所以作者刚起头的主见是想动态援引jQuery类库,如下:

复制代码 代码如下:var script =
document.createElement(“script”);
script.src =
“”;
document.body.appendChild(script);

唯独碰到了难点:二个是$被并吞,二是HKuga系统采取iframe嵌套,並且还只怕有frame嵌套,结构很复杂。而console运维的代码是在最顶层运营的,前期的chrome扩大插件是运维在其间frame中的,大概那边的JS前面不能一直利用。就算$被侵吞的标题能够透过jQuery.noConflict();来缓慢解决,不过jquery库和原先系统的JS仓库储存在调用顺序的主题素材,何况在内部的frame中死活访谈不到jQuery这些目的。最终小编主宰抛弃行使jQuery,该用原生JavaScript。

知音漫客,谷歌(Google)Chrome浏览器扩充程序开辟小记。JS代码如下:

/*
 * author:清明雨上
 * date:2016-1-5
 */
var mydate = function() {
  //time2-time1
  function getTimeDiff(time1, time2) {
    var st1 = time1.split(':');
    var st2 = time2.split(':');
    return ((st2[0] | 0) * 60 + (st2[1] | 0)) - ((st1[0] | 0) * 60 + (st1[1] | 0) * 1);
  }

  var timeList = [];
  var mymain = window.parent.frames['Main'].document.getElementById('ctl00_cphMain_CalendarAC');
  var listAC = mymain.getElementsByClassName('listAC');
  for (var i = 0; i < listAC.length; i++) {
    var item = listAC[i];
    var t = {};
    t.timeSpan = item.getElementsByTagName('td')[1].innerText;
    t.remark = item.getElementsByTagName('td')[2].innerText;
    timeList.push(t);
  };

  var totalMin = 0;
  var noworkDays = 0; //请假天数
  var workDays = 0; //实际上班天数
  var workHourEveryday = [];
  var no8h = 0; //未满8小时天数
  var over20 = 0; //20点以后下班天数
  var over21 = 0; //21点以后下班天数
  var over22 = 0; //22点以后下班天数
  var over23 = 0; //23点以后下班天数
  for (var i = 0; i < timeList.length; i++) {
    var time = timeList[i];
    if (time.remark != '无') {
      noworkDays++;
      continue;
    }
    if (time.timeSpan == '无刷卡记录')
      continue;

    var splitTime = time.timeSpan.split('~');
    if (splitTime.length == 2) {
      //正常上下班
      var begin = splitTime[0];
      var end = splitTime[1];
      var thisMin = getTimeDiff(begin, end);
      totalMin += thisMin;
      workDays++;
      if (thisMin / 60 < 8) {
        workHourEveryday.push('<font color="red"><b style="font-size:15px">' + parseInt(thisMin / 60) + '</b>.' + thisMin % 60 + '</font>');
        no8h++;
      } else {
        workHourEveryday.push('<b style="font-size:15px">' + parseInt(thisMin / 60) + '</b>.' + thisMin % 60);
        var offworkHour = parseInt(end.split(':')[0]);
        if (offworkHour >= 20) {
          over20++;
        }
        if (offworkHour >= 21) {
          over21++;
        }
        if (offworkHour >= 22) {
          over22++;
        }
        if (offworkHour >= 23) {
          over23++;
        }
      }
    }
  };
  var myHour = parseInt(totalMin / 60); //本月工作累计小时数
  var otherMin = totalMin % 60; //本月工作出小时部分外的分钟数
  var avgHourOneDay = workDays == 0 ? '0.0' : '<b style="font-size:15px">'+(parseInt(myHour / workDays) + '</b>.' + (parseInt((myHour % workDays) * 60 / workDays) + parseInt(otherMin / workDays))); //平均每天工作时长

  var html = '<div class="alectest" style="background: #cbebfb;padding:7px;">\
        <div>出勤时间:<b style="font-size:15px;color:red">' + myHour + '</b>小时<font color="red">' + otherMin + '</font>分钟(平均<font color="red">' + avgHourOneDay + '</font>小时/天)</div>\
        <div>参考时间:' + workDays * 8 + '小时【' + workDays + '天】(除去请假和节假日,实际有打卡记录的天数)</div>\
        <div>请假/外出天数:' + noworkDays + '天</div>\
        <div>每天工作时间(格式:小时.分钟):' + workHourEveryday.join(',') + '</div>\
        <div>未满8小时天数:<b style="font-size:15px">' + no8h + '</b>天</div>\
        <div>20点以后下班天数:<b style="font-size:15px">' + over20 + '</b>天</div>\
        <div>21点以后下班天数:<b style="font-size:15px">' + over21 + '</b>天</div>\
        <div>22点以后下班天数:<b style="font-size:15px">' + over22 + '</b>天</div>\
        <div>23点以后下班天数:<b style="font-size:15px">' + over23 + '</b>天</div>\
       </div>'
  var alectest = mymain.parentNode.getElementsByClassName('alectest');
  if (alectest.length > 0) {
    // mymain.parentNode.removeChild(alectest[0]);
    alectest[0].innerHTML = html;
  } else {
    var div = document.createElement("div");
    div.innerHTML = html;
    var fragement = document.createDocumentFragment();
    while (div.childNodes[0]) {
      fragement.appendChild(div.childNodes[0]);
    }
    mymain.parentNode.insertBefore(fragement, mymain);
  }
  bindBtnClick();
}
var bindBtnClick = function() {
  window.parent.frames['Main'].document.getElementById('ctl00_cphTop_BtnQuery').addEventListener('click', function() {
    var inter = setInterval(function() {
      if (window.parent.frames['Main'].document.getElementById('ctl00_cphMain_CalendarAC') &&
        window.parent.frames['Main'].document.getElementById('ctl00_UpMaster').style.display == 'none') {
        clearInterval(inter);
        mydate();
      }
    }, 500);
  }, false);
}
bindBtnClick();

代码表达:监听考勤查询按键的click事件,考勤消息加载成功后,实行作者的JS方法。

  第二步,开采Chrome扩张程序

  参谋资料:

  manifest.json是必须的,最终内容如下:

{
 "manifest_version":2,
  "name": "Extension Name", 
 "version": "0.1.0", 
 "description": "插件描述",
 "icons": { "48": "icon.png" },
 "content_scripts": [
  {
   "all_frames" : true,
   "matches": ["http://*"],
   "js": ["haha.js"],
   "run_at": "document_end"
  }
 ]
}

除此以外,在同目录下放入一个icon.png图片,至此,全数文件都筹算结束,目录如下:

澳门葡京 2

开发Chrome的扩展程系列表的开垦者方式》大包扩大程序…,在扩张程序根目录中输入下边三个文件所在的父目录。

澳门葡京 3

澳门葡京 4

点击【打包扩张程序】就能够。

注解:假诺点击该开关长日子得不到反映,能够能是你的chrome区别意第三方非认证的恢宏程序,化解方案是,点击chrome急忙方式右键》属性》目的输入框后边扩大“
enable-easy-off-store-extension-install”,注意前方的空格。

澳门葡京 5

然后再品尝以上步骤就行了。

  第三步,防止Chrome屏蔽非官方扩充程序 设置

  Chrome会提醒暂停非官方扩展程序,每趟运转就有提醒,很可恶。

澳门葡京 6

  查找资料:

基于以上资料表达,能够轻易化解这些标题。

  

  至此,该可扩充程序全体变成,结果图如下:

澳门葡京 7

前几天自家上某漫画网址,看到斗破苍穹有一集更新,点开后边世提醒:

基本知识
1、插件文件结构
1.1、manifest.json
每贰个恢弘、可设置的WebApp、皮肤,都有三个JSON格式的manifest文件,里面寄放首要的插件相关新闻。

澳门葡京 8

您恐怕感兴趣的稿子:

  • json格式化/压缩工具 Chrome插件扩张版
  • chrome扩充学习 右键菜单完结代码
  • Chrome扩充页面动态绑定JS事件提示错误
  • Chrome Web App开辟小结

依据公司的鲜明,每月八时辰,弹性职业制。所以我们平时来的不太准时,假使有事,下…

为维护版权方权益或背离国家法律法则本站不提供阅读,请点击这里
踏向版权方平台阅读

多个最大旨的配备例子:

而外请假和合法节日外,别的样式呈现都以平等的,每一次都要贰个个估价下个月的差不离工时,十二分不便利。后来收看企业有人在用贰个Chrome扩张程序,能够测算出三个月的劳作时间,可是本身认为照旧尚未观察自家想看的东西,因为除了每一种月的一同工时外,笔者还想看到:平均天天劳作时间长度、每日的行事时长、20点过后的命局(20点以往下班的能够报销晚饭的,哈哈……)、22点之后下班的运气(报废打车费)……所以作者主宰依旧友好写叁个吧。

点击后赶到了忘年交漫客网址,http://www.zymk.cn/1453/34274.html
必要付费购买了,一期是3元。

{
  "name": "browser action demo",
  "version": "1.0",
  "permissions": [
    "tabs", "http://*/*", "https://*/*"
  ],
  "browser_action": {
    "default_title": "开关灯",
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },
  "background": {
    "page": "background.html"
   },
  "manifest_version": 2
}

  第一步,作者先写了三个JS方法,然后经过F12开荒者工具的Console复制粘贴运营。

不购买时,会油不过生遮挡层和一个提示您购买的窗口,此时是无计可施点击下一页的,但尚无遮挡键盘事件,通过键盘的左右箭头还能够翻页的,通过这些bug,大家得防止费看卡通了。

1.2、popup 插件的弹窗,上边配置中的browser_action中default_popup便是以此页面。

  集团用的OA系统绝非引用jQuery库,所以自个儿刚先导的主见是想动态援引jQuery类库,如下:

三种方式:

1.3、background page 绝大大多用到都包含几个背景页面(background
page),用来施行应用的机要意义。

复制代码 代码如下:

  • js删除遮挡层的dom节点

1.4、Content scripts 透过content script可以使应用和web页面交互,content
script是指能够在浏览器已经加载的页面内部运营的Javascript脚本。能够将content
script看做是网页的一部分,而不是它所在的应用的一某个。

var script = document.createElement(“script”);
script.src =
“”;
document.body.appendChild(script);

2、文件之间的竞相 popup弹窗中能够一贯调用背景页面中的函数。

不过遭逢了难题:贰个是$被挤占,二是H逍客系统选择iframe嵌套,並且还会有frame嵌套,结构很复杂。而console运维的代码是在最顶层运维的,前期的chrome扩充插件是运作在里边frame中的,大概这边的JS前边不可能直接行使。固然$被占用的难题得以因此jQuery.noConflict();来消除,可是jquery库和原本系统的JS仓库储存在调用顺序的标题,何况在中间的frame中死活访问不到jQuery这一个指标。最终笔者说了算吐弃使用jQuery,该用原生JavaScript。

var bg_child=document.getElementById("layui-layer-shade1"); 
bg_child.parentNode.removeChild(bg_child); 
var w_child=document.getElementById('layui-layer1');
w_child.parentNode.removeChild(w_child);

Content
script能够读取并修改当前web页面的dom树,不过它并不能改改它所在应用的背景页面(background)的dom树。

JS代码如下:

  • css遮蔽遮挡层的dom节点

Content script与使用之间的交互:能够互相发送音信

/*
 * author:清明雨上
 * date:2016-1-5
 */
var mydate = function() {
  //time2-time1
  function getTimeDiff(time1, time2) {
    var st1 = time1.split(':');
    var st2 = time2.split(':');
    return ((st2[0] | 0) * 60 + (st2[1] | 0)) - ((st1[0] | 0) * 60 + (st1[1] | 0) * 1);
  }

  var timeList = [];
  var mymain = window.parent.frames['Main'].document.getElementById('ctl00_cphMain_CalendarAC');
  var listAC = mymain.getElementsByClassName('listAC');
  for (var i = 0; i < listAC.length; i++) {
    var item = listAC[i];
    var t = {};
    t.timeSpan = item.getElementsByTagName('td')[1].innerText;
    t.remark = item.getElementsByTagName('td')[2].innerText;
    timeList.push(t);
  };

  var totalMin = 0;
  var noworkDays = 0; //请假天数
  var workDays = 0; //实际上班天数
  var workHourEveryday = [];
  var no8h = 0; //未满8小时天数
  var over20 = 0; //20点以后下班天数
  var over21 = 0; //21点以后下班天数
  var over22 = 0; //22点以后下班天数
  var over23 = 0; //23点以后下班天数
  for (var i = 0; i < timeList.length; i++) {
    var time = timeList[i];
    if (time.remark != '无') {
      noworkDays++;
      continue;
    }
    if (time.timeSpan == '无刷卡记录')
      continue;

    var splitTime = time.timeSpan.split('~');
    if (splitTime.length == 2) {
      //正常上下班
      var begin = splitTime[0];
      var end = splitTime[1];
      var thisMin = getTimeDiff(begin, end);
      totalMin += thisMin;
      workDays++;
      if (thisMin / 60 < 8) {
        workHourEveryday.push('<font color="red"><b style="font-size:15px">' + parseInt(thisMin / 60) + '</b>.' + thisMin % 60 + '</font>');
        no8h++;
      } else {
        workHourEveryday.push('<b style="font-size:15px">' + parseInt(thisMin / 60) + '</b>.' + thisMin % 60);
        var offworkHour = parseInt(end.split(':')[0]);
        if (offworkHour >= 20) {
          over20++;
        }
        if (offworkHour >= 21) {
          over21++;
        }
        if (offworkHour >= 22) {
          over22++;
        }
        if (offworkHour >= 23) {
          over23++;
        }
      }
    }
  };
  var myHour = parseInt(totalMin / 60); //本月工作累计小时数
  var otherMin = totalMin % 60; //本月工作出小时部分外的分钟数
  var avgHourOneDay = workDays == 0 ? '0.0' : '<b style="font-size:15px">'+(parseInt(myHour / workDays) + '</b>.' + (parseInt((myHour % workDays) * 60 / workDays) + parseInt(otherMin / workDays))); //平均每天工作时长

  var html = '<div class="alectest" style="background: #cbebfb;padding:7px;">\
        <div>出勤时间:<b style="font-size:15px;color:red">' + myHour + '</b>小时<font color="red">' + otherMin + '</font>分钟(平均<font color="red">' + avgHourOneDay + '</font>小时/天)</div>\
        <div>参考时间:' + workDays * 8 + '小时【' + workDays + '天】(除去请假和节假日,实际有打卡记录的天数)</div>\
        <div>请假/外出天数:' + noworkDays + '天</div>\
        <div>每天工作时间(格式:小时.分钟):' + workHourEveryday.join(',') + '</div>\
        <div>未满8小时天数:<b style="font-size:15px">' + no8h + '</b>天</div>\
        <div>20点以后下班天数:<b style="font-size:15px">' + over20 + '</b>天</div>\
        <div>21点以后下班天数:<b style="font-size:15px">' + over21 + '</b>天</div>\
        <div>22点以后下班天数:<b style="font-size:15px">' + over22 + '</b>天</div>\
        <div>23点以后下班天数:<b style="font-size:15px">' + over23 + '</b>天</div>\
       </div>'
  var alectest = mymain.parentNode.getElementsByClassName('alectest');
  if (alectest.length > 0) {
    // mymain.parentNode.removeChild(alectest[0]);
    alectest[0].innerHTML = html;
  } else {
    var div = document.createElement("div");
    div.innerHTML = html;
    var fragement = document.createDocumentFragment();
    while (div.childNodes[0]) {
      fragement.appendChild(div.childNodes[0]);
    }
    mymain.parentNode.insertBefore(fragement, mymain);
  }
  bindBtnClick();
}
var bindBtnClick = function() {
  window.parent.frames['Main'].document.getElementById('ctl00_cphTop_BtnQuery').addEventListener('click', function() {
    var inter = setInterval(function() {
      if (window.parent.frames['Main'].document.getElementById('ctl00_cphMain_CalendarAC') &&
        window.parent.frames['Main'].document.getElementById('ctl00_UpMaster').style.display == 'none') {
        clearInterval(inter);
        mydate();
      }
    }, 500);
  }, false);
}
bindBtnClick();

3、为web页面注入JS(Content scripts)文件: 措施一,在manifest.json文件中计划:

代码表明:监听考勤查询开关的click事件,考勤音讯加载成功后,实行笔者的JS方法。

div#layui-layer-shade1 {
    display: none;
}

div#layui-layer1 {
    display: none;
}
"content_scripts": [
  {
   "matches": ["http://www.google.com/*"],
   "css": ["mystyles.css"],
   "js": ["jquery.js", "myscript.js"]
  }
 ],

  第二步,开辟Chrome扩大程序

在调节台用运转删除dom的代码,看完了流行的一章。外人用这一个艺术,也不自然会操作,所以,笔者说了算开荒二个chrome插件,并轻巧,要是有必然的前端基础,开荒chrmoe插件分分钟的事。

方法二,通过executeScript():

  仿照效法资料:(查询manifest.json的content_scripts节点的一一属性表明)

三个 Chrome 扩充,其实正是一个配置文件 manifest.json 和一密密麻麻
HTML、CSS、JS、图片文件的集聚,而文件之间的公司,跟平日的web开拓一样。

向页面注入JavaScript 脚本推行。

  manifest.json是必须的,最后内容如下:

首先说manifest.json文件,这些文件是插件的叙说,不可或缺,必须的字段只有:name和version,其余字段依照自身的主次选取。

chrome.tabs.executeScript(integer tabId, object details, function callback)
chrome.tabs.executeScript(tabId, {file: "func.js", allFrames: true});
{
 "manifest_version":2,
  "name": "Extension Name", 
 "version": "0.1.0", 
 "description": "插件描述",
 "icons": { "48": "icon.png" },
 "content_scripts": [
  {
   "all_frames" : true,
   "matches": ["http://*"],
   "js": ["haha.js"],
   "run_at": "document_end"
  }
 ]
}
{
  "manifest_version": 2,
  // manifest版本,指定如何执行代码,由google官方发布,目前版本为2
  "name": "知音漫客",
  // 插件名称
  "description": "去除 知音漫客 遮挡层",
  // 插件描述
  "version": "1.0",
  // 插件版本号

  "icons": {
    // 显示在菜单栏的指示图标,大小范围16-128像素,可以指定多个不同像素图标
    "48": "icon.ico"
  },

  "options_page": "options.html",
  // 插件图标右键,点击弹出菜单的选项会跳到options.html页面

  "chrome_url_overrides": {
    // "newtab": "tab.html"
    // 自定义页面替换chrome默认页面,如新标签页(newtab)、书签页面(bookmarks)和历史记录(history)。
  },


  "browser_action": {
    // 工具栏图标

    "default_icon": "icon.ico",
    // 扩展log
    "default_title": "知音漫客",
    // 悬浮提示文字
    "default_popup": "index.html"
    // 点击后弹出index.html

  },

  "page_ctions": {
    // 地址栏图标,不是显示在地址栏的右边,而是显示在地址内部右方,比如说收藏夹那个五角星
  },



// 下面两个我会在后面详细介绍

  "background": {
    // 扩展的后台页面
    // "scripts": ["background.js"]
  },


  "content_scripts": [
      {
        //注入页面的脚本和css 
          "matches": ["*://www.zymk.cn/*"],
          "css": ["hide.css"]
      }
  ]


}

UI外观
1、browser action:
在chrome主工具条的地址栏左侧扩大贰个Logo。

除此以外,在同目录下放入三个icon.png图片,至此,全数文件都图谋结束,目录如下:

新手轻松在content_scripts和background搞糊涂,首先要确定,你的增添程序和浏览器页面是在区别的历程中运转的。一旦插件被启用,chrome会开拓三个独门的java运营境遇给你的插件使用,background是您插件的后台进度,而content_scripts是流入到网页中的脚本,能够干预页面包车型客车内容。它们中间是无法直接待上访谈对方变量的。

留意:Packaged apps无法应用browser actions

澳门葡京 9

这几个插件并无需前台的彰显分界面,只要把脚本注入到页面中修改网页,所以用content_scripts

1.1、manifest.json 中配置 注册browser action:

张开Chrome的扩大程连串表的开垦者情势》大包扩大程序…,在扩张程序根目录中输入上边多少个公文所在的父目录。

  "content_scripts": [
      {
        //注入页面的脚本和css 
          "matches": ["*://www.zymk.cn/*"],
          //只在知音漫客网站运行
          // "js": ["delete.js"]
          //注入js文件,注入的js与页面中js的变量同样不互通,不用担心与原来js冲突,只是共享同一个dom
          // "run_at": "document_end"
          // 指定content_scripts注入的时机
          "css": ["hide.css"]
          //向匹配页面中注入的CSS文件。这些文件将在页面的DOM树创建和显示之前 

      }
  ]
{
 "name": "My extension",
 ...
 "browser_action": {
  "default_icon": "images/icon19.png", // optional 
  "default_title": "Google Mail",   // optional; shown in tooltip 
  "default_popup": "popup.html"    // optional 
 },
 ...
}

澳门葡京 10

若果用js格局,需求钦赐注入机缘"run_at": "document_end",文件就要创建完DOM之后,但还不曾加载类似于图片或frame等的子财富前及时注入。三种格局都足以,这里自身用质量优的css格局。

1.2、配置项表明 (1)default_icon
图标 19 *19px

澳门葡京 11

编写制定完相应的html,css,js就完了一个chrome插件了。

修改browser_action的manifest中
default_icon字段,只怕调用setIcon()方法。

点击【打包扩充程序】就可以。

除以上,再作证那个。

chrome.browserAction.setIcon(object details)

评释:就算点击该开关长日子得不到反映,能够能是你的chrome不一致意第三方非认证的增加程序,化解方案是,点击chrome快速方式右键》属性》指标输入框前边扩充“
enable-easy-off-store-extension-install”,注意前方的空格。

什么查看别的插件的源码

访问chrome://version
找到Chrome安装的本机目录后,步向extension文件夹,全部插件的数据都在那。

设置browser
action的Logo。Logo能够是二个图片的门道恐怕是从一个canvas成分提取的像素新闻.。无论是图标路线依然canvas的imageData,这一个性格必须被钦命。

澳门葡京 12

怎么样打包chrome增添

地址栏输入:chrome://extensions/,勾选开采者选项,点击打包扩大招生查询,它会在你插件文件夹同级目录生成成crx压缩文件和pem秘钥文件,crx文件能够间接拖到扩大程序页面安装

(2)default_title
修改browser_action的manifest中default_title字段,可能调用setTitle()方法。你可认为default_title字段钦定本地化的字符串;点击Internationalization查看详细情形。

下一场再品尝以上步骤就行了。

不用把js文件内嵌到html

鉴于安全着想,内嵌的js代码是不能运维的,必须经过援引的不二等秘书籍。

澳门葡京,chrome.browserAction.setTitle(object details)

  第三步,防止Chrome屏蔽非官方扩张程序 设置

调试

原web的页面和content_scripts,能够一向张开调节台,Elements是用来做DOM深入分析,Sources的Content
scripts做js调节和测量检验,在头里打上断点,实行到断点处停住,鼠标放上去能够观测变量
调试Background,打开
chrome://extensions
,点击检查视图后边的背景图。
调度Popup,工具栏左侧右击插件图标,点击检查核对弹出内容。

安装browser action的标题,那几个将映未来tooltip中。

  Chrome会提醒暂停非官方扩大程序,每一回运营就有提醒,很可恶。

支付文书档案及源码

360翻译的法定文书档案:http://open.chrome.360.cn/extension\_dev/overview.html
合马耳他语档:https://developer.chrome.com/extensions
源码下载:https://github.com/zhongsheng23/manhua

末段,假设有了必然经济技术,如若不差两三块钱,请大家协助正版。

文章相同的时间发布在钟声博客

(3)Badge
Browser actions能够采用性的突显壹个badge— 在Logo上显得一些文书。Badges
能够很简短的为browser action更新一些小的扩充状态提醒音信。

澳门葡京 13

因为badge空间有限,所以只帮助4个以下的字符。

  查找资料:(防止Chrome屏蔽非官方增添程序教程)

安装badge文字和颜色能够独家采取setBadgeText()andsetBadgeBackgroundColor()。

依照以上资料证实,可以轻便化解那几个难点。

chrome.browserAction.setBadgeText(object details)

  

设置browser action的badge文字,badge 展现在Logo上面。

  至此,该可扩张程序全体成就,结果图如下:

setBadgeBackgroundColor

chrome.browserAction.setBadgeBackgroundColor(object details)

澳门葡京 14

设置badge的背景颜色。

您恐怕感兴趣的篇章:

  • json格式化/压缩工具
    Chrome插件扩张版
  • chrome扩充学习
    右键菜单实现代码
  • Chrome扩大页面动态绑定JS事件提醒错误
  • Chrome Web App开拓小结

(4)default_popup
Popup 气泡提示

修改browser_action的manifest中default_popup字段来内定HTML文件,
或然调用setPopup()方法。

chrome.browserAction.setPopup(object details)

设置二个点击browser actions时彰显在popup中的HTML。

1.3、提示 为了获得最棒的来得效果, 请服从以下原则:

确认 Browser actions 只行使在大繁多网址都有意义供给的风貌下。
确定 Browser actions 未有动用在少数网页才有功能的景观, 此场景请使用page
actions。
认可你的Logo尺寸尽量占满19×19的像素空间。 Browser action
的Logo应该看起来比page action的Logo越来越大更重。
不要尝试模仿谷歌(Google)Chrome的扳手Logo,在差异的themes下它们的表现或然出现难点,,並且增添应该确定些。
不遗余力利用阿尔法通道同不时候柔滑你的Logo边缘,因为众多用户使用themes,你的图标应该在在各样背景下都表现不错。
不要不停的闪动你的图标,那很令人嫌恶。

2、右键菜单 您可以选用针对性不一样门类的靶子(如图片,链接,页面)扩大右键菜单项。

你能够依照要求加上两个右键菜单项。二个恢弘里丰盛的四个右键菜单项会被Chrome自动组合放到对应扩张名称的二级菜单里。

右键菜单能够出现在随便文书档案(或文书档案中的框架)中,乃至是本土文件(如file://也许Chrome://)中。若想调节右键菜单在不一样文书档案中的彰显,能够在调用create()和update()时钦点documentUrlPatterns。

2.1、manifest.json 中配置 在清单中宣示“contentMenus”权限。同不寻常候,您应该钦命贰个16×16的图标用作右键菜单的标志。举个例子:

{
    "name": "My extension",
    ...
    "permissions": [
     "contextMenus"
    ],
    "icons": {
     "16": "icon-bitty.png",
     "48": "icon-small.png",
     "128": "icon-large.png"
    },
    ...
}

3、桌面文告 通报用户发生了部分第一的事务。桌面布告会呈现在浏览器窗口之外。
上边包车型大巴图形是打招呼彰显时的效率,在差异的阳台下,文告的来得效果会有些一线差别。

直-接使用一小段 JavaScript
代码创造通告,当然也得以因而扩大包内的三个单独HTML页面。

3.1、manifest.json 中配置

{
 "name": "My extension",
 ...
 "permissions": [
  "notifications"
 ],
 ...
}

3.2、与强大页交互: 应用 getBackgroundPage() 和 getViews()在文告与恢弘页面中树立相互

// 在通知中调用扩展页面方法...
chrome.extension.getBackgroundPage().doThing();

// 从扩展页面调用通知的方法...
chrome.extension.getViews({type:"notification"}).forEach(function(win) {
 win.doOtherThing();
});

4、Omnibox omnibox 应用程序分界面允许向谷歌Chrome的地点栏登记一个根本字,地址栏也叫omnibox

非得在 manifest 中带有omnibox
关键字段。必要内定像素为16×16的图标,以便当用户输加入关贸总协定组织键字时,在地点栏中展现。

4.1、manifest.json 中配置

{
 "name": "Aaron's omnibox extension",
 "version": "1.0",
 "omnibox": { "keyword" : "aaron" }, 
 "icons": { 
  "16": "16-full-color.png" 
 }, 
 "background_page": "background.html"
}

Chrome
自动创立灰度形式16×16像素的Logo。你应当提供全色版本Logo以便能够在任何场景下利用。

5、选项页 为了让用户设定你的扩大作用,你可能须要提供叁个增选页。倘让你提供了选项页,在庞大管理页面
chrome://extensions上会提供三个链接。点击选项链接即可打开你的选项页。

5.1、manifest.json 中配置

{
 "name": "My extension",
 ...
 "options_page": "options.html",
 ...
}

6、覆写特定页 行使代替页,能够将Chrome默许的一对特定页面替换掉,改为利用扩充提供的页面。

6.1、manifest.json 中配置

{
 "name": "My extension",
 ...

 "chrome_url_overrides" : {
  "pageToOverride": "myPage.html"
 },
 ...
}

7、Page Actions 应用page actions把图标放置到地址栏里。

想让扩张Logo总是可知,则采取browser action。

包装的应用程序不可能选拔page actions。

7.1、manifest.json 中配置

{
 "name": "My extension",
 ...
 "page_action": {
  "default_icon": "icons/foo.png", // optional 
  "default_title": "Do action",  // optional; shown in tooltip 
  "default_popup": "popup.html"  // optional 
 },
 ...
}

7.2、配置项表明 同browser actions一样,page actions 能够有Logo、提示新闻、
弹出窗口。但尚未badge

使用方法 show() 和 hide() 可以显得和遮掩page action。缺省状态下page
action是遮掩的。当要体现时,须求钦赐Logo所在的标签页,图标展现后会一直可知,直到该标签页关闭或开端显得不相同的UOdysseyL
(如:用户点击了一个老是)

7.3、提示 要只对少数页面使用page action;
永不对绝大好些个页面使用它,假若效果须要,使用 browser actions替代。
没事别总让Logo出现动画,那会令人很烦。
8、主题 主旨是一种极其的恢弘,可以用来更动整个浏览器的外观。主旨和正式增加的打包方式临近,不过主旨中不能够包罗JavaScript恐怕HTML代码。

8.1、manifest.json 中配置

{
 "version": "2.6",
 "name": "camo theme",
 "theme": {
  "images" : {
   "theme_frame" : "images/theme_frame_camo.png",
   "theme_frame_overlay" : "images/theme_frame_stripe.png",
   "theme_toolbar" : "images/theme_toolbar_camo.png",
   "theme_ntp_background" : "images/theme_ntp_background_norepeat.png",
   "theme_ntp_attribution" : "images/attribution.png"
  },
  "colors" : {
   "frame" : [71, 105, 91],
   "toolbar" : [207, 221, 192],
   "ntp_text" : [20, 40, 0],
   "ntp_link" : [36, 70, 0],
   "ntp_section" : [207, 221, 192],
   "button_background" : [255, 255, 255]
  },
  "tints" : {
   "buttons" : [0.33, 0.5, 0.47]
  },
  "properties" : {
   "ntp_background_alignment" : "bottom"
  }
 }
}

您恐怕感兴趣的小说:

  • Chrome增添页面动态绑定JS事件提示错误
  • json格式化/压缩工具
    Chrome插件扩充版
  • JavaScript编写Chrome扩大完结与浏览器的互动及时间通告

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website