浏览器插件:花体英文转换


最近在学vue,为了尽快上手,做了一个小demo。

一、manifest.json

浏览器插件也是基于html+css+javascript,再加一个必要的json文件描述,

也就是manifest.json

{ "manifest_version": 2, "name": "flourish", "version": "1.0", "description": "change the word and make it more beautiful", "icons": { "96": "icon.png" }, "browser_action": { "default_icon": "icon.png", "default_title": "FlouRish", "default_popup": "page.html" }, "content_security_policy": "style-src 'self' 'unsafe-inline';script-src 'self' 'unsafe-eval'; object-src 'self' ;" }

书写的时候参考了这几个网页:

360浏览器应用开发文档:manifest文件 (据说是把chorme的官方文档翻译了一遍,能够更方便地进行理解)

mainfest配置:常用属性

 

1.概念

manifest.json 是每个 WebExtension 唯一必须包含的元数据文件。
通过使用 manifest.json,您可以指定扩展的基本元数据,例如名称和版本,还可以指定扩展各个方面的功能。

2.必须项

name、version以及mainfest_version都是必填字段。

manifest_version

manifest文件自身格式的版本号。用整数表示,目前为止只接受 2。

3.选择项

(1) icons

拓展图标,可以选择16×16,48×48,128×128三种大小。

如果不配置icons,则拓展工具使用默认图标。

(2) browser_action

■ default_title

鼠标移入,显示扩展的文本描述

■ default_popup

鼠标点击,弹出扩展的模拟窗口,展示内容(一个html文件)

■ default_icon

右上角的扩展图标

 (3) content_security_policy

前端安全配置之Content-Security-Policy(csp)

CSP指的是内容安全策略,为了缓解很大一部分潜在的跨站脚本问题,浏览器的扩展程序系统引入了内容安全策略(CSP)的一般概念。这将引入一些相当严格的策略,会使扩展程序在默认情况下更加安全,开发者可以创建并强制应用一些规则,管理网站允许加载的内容。

指令名 demo 说明
default-src 'self' cdn.example.com 默认策略,可以应用于js文件/图片/css/ajax请求等所有访问
style-src 'self' css.example.com 定义css文件的过滤策略
script-src 'self' js.example.com 定义js文件的过滤策略
object-src 'self' 定义页面插件的过滤策略,如 <object>, <embed> 或者<applet>等元素

 

二、Vue实现数据绑定

html代码:

<div id="app">
    <input v-model="scanf" spellcheck="false">
    <button @click="clear">clear</button>
    <p id="one">{{one}}</p>
    <p id="two">{{two}}</p>
    <p id="three">{{three}}</p>
    <p id="four">{{four}}</p>
    <p id="five">{{five}}</p>
    <p id="six">{{six}}</p>
    <p id="seven">{{seven}}</p>
    <p id="eight">{{eight}}</p>
    <p id="nine">{{nine}}</p>
</div>

js代码:

  1 // 判断字符
  2 function alpha(char) {
  3   var num;
  4   if (char >= "A" && char <= "Z") {
  5     num = char.charCodeAt() - 65;
  6     return 2 * num;
  7   } else if (char >= "a" && char <= "z") {
  8     num = char.charCodeAt() - 97;
  9     return 52 + 2 * num;
 10   } else if (char >= "0" && char <= "9") {
 11     num = char.charCodeAt() - 48;
 12     return 104 + 2 * num;
 13   } else {
 14     return -1;
 15   }
 16 }
 17 
 18 // 处理字符
 19 function alphaBat(char, capital, string) {
 20   var m = alpha(char);
 21   if (m >= 0) string += capital.substring(m, m + 2);
 22   else string += char;
 23   return string;
 24 }
 25 
 26 // 处理字符串
 27 function neat(scanf, capital) {
 28   var length = scanf.length;
 29   var str = "";
 30   for (i = 0; i < length; i++) {
 31     var char = scanf.charAt(i);
 32     str = alphaBat(char, capital, str);
 33   }
 34   return str;
 35 }
 36 
 37 var vm = new Vue({
 38   el: "#app",
 39   data: {
 40     scanf: "",
 41   },
 42   methods: {
 43     clear: function () {
 44       this.scanf = "";
 45     },
 46   },
 47   computed: {
 48     one: function () {
 49       return neat(
 50         this.scanf,
 51         "𝐀𝐁𝐂𝐃𝐄𝐅𝐆𝐇𝐈𝐉𝐊𝐋𝐌𝐍𝐎𝐏𝐐𝐑𝐒𝐓𝐔𝐕𝐖𝐗𝐘𝐙𝐚𝐛𝐜𝐝𝐞𝐟𝐠𝐡𝐢𝐣𝐤𝐥𝐦𝐧𝐨𝐩𝐪𝐫𝐬𝐭𝐮𝐯𝐰𝐱𝐲𝐳𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗"
 52       );
 53     },
 54     two: function () {
 55       return neat(
 56         this.scanf,
 57         "𝑨𝑩𝑪𝑫𝑬𝑭𝑮𝑯𝑰𝑱𝑲𝑳𝑴𝑵𝑶𝑷𝑸𝑹𝑺𝑻𝑼𝑽𝑾𝑿𝒀𝒁𝒂𝒃𝒄𝒅𝒆𝒇𝒈𝒉𝒊𝒋𝒌𝒍𝒎𝒏𝒐𝒑𝒒𝒓𝒔𝒕𝒖𝒗𝒘𝒙𝒚𝒛𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗"
 58       );
 59     },
 60     three: function () {
 61       return neat(
 62         this.scanf,
 63         "𝓐𝓑𝓒𝓓𝓔𝓕𝓖𝓗𝓘𝓙𝓚𝓛𝓜𝓝𝓞𝓟𝓠𝓡𝓢𝓣𝓤𝓥𝓦𝓧𝓨𝓩𝓪𝓫𝓬𝓭𝓮𝓯𝓰𝓱𝓲𝓳𝓴𝓵𝓶𝓷𝓸𝓹𝓺𝓻𝓼𝓽𝓾𝓿𝔀𝔁𝔂𝔃𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗"
 64       );
 65     },
 66     four: function () {
 67       return neat(
 68         this.scanf,
 69         "𝕬𝕭𝕮𝕯𝕰𝕱𝕲𝕳𝕴𝕵𝕶𝕷𝕸𝕹𝕺𝕻𝕼𝕽𝕾𝕿𝖀𝖁𝖂𝖃𝖄𝖅𝖆𝖇𝖈𝖉𝖊𝖋𝖌𝖍𝖎𝖏𝖐𝖑𝖒𝖓𝖔𝖕𝖖𝖗𝖘𝖙𝖚𝖛𝖜𝖝𝖞𝖟𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗"
 70       );
 71     },
 72     five: function () {
 73       return neat(
 74         this.scanf,
 75         "𝖠𝖡𝖢𝖣𝖤𝖥𝖦𝖧𝖨𝖩𝖪𝖫𝖬𝖭𝖮𝖯𝖰𝖱𝖲𝖳𝖴𝖵𝖶𝖷𝖸𝖹𝖺𝖻𝖼𝖽𝖾𝖿𝗀𝗁𝗂𝗃𝗄𝗅𝗆𝗇𝗈𝗉𝗊𝗋𝗌𝗍𝗎𝗏𝗐𝗑𝗒𝗓𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿"
 76       );
 77     },
 78     six: function () {
 79       return neat(
 80         this.scanf,
 81         "𝗔𝗕𝗖𝗗𝗘𝗙𝗚𝗛𝗜𝗝𝗞𝗟𝗠𝗡𝗢𝗣𝗤𝗥𝗦𝗧𝗨𝗩𝗪𝗫𝗬𝗭𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇𝟬𝟭𝟮𝟯𝟰𝟱𝟲𝟳𝟴𝟵"
 82       );
 83     },
 84     seven: function () {
 85       return neat(
 86         this.scanf,
 87         "𝘈𝘉𝘊𝘋𝘌𝘍𝘎𝘏𝘐𝘑𝘒𝘓𝘔𝘕𝘖𝘗𝘘𝘙𝘚𝘛𝘜𝘝𝘞𝘟𝘠𝘡𝘢𝘣𝘤𝘥𝘦𝘧𝘨𝘩𝘪𝘫𝘬𝘭𝘮𝘯𝘰𝘱𝘲𝘳𝘴𝘵𝘶𝘷𝘸𝘹𝘺𝘻𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿"
 88       );
 89     },
 90     eight: function () {
 91       return neat(
 92         this.scanf,
 93         "𝘼𝘽𝘾𝘿𝙀𝙁𝙂𝙃𝙄𝙅𝙆𝙇𝙈𝙉𝙊𝙋𝙌𝙍𝙎𝙏𝙐𝙑𝙒𝙓𝙔𝙕𝙖𝙗𝙘𝙙𝙚𝙛𝙜𝙝𝙞𝙟𝙠𝙡𝙢𝙣𝙤𝙥𝙦𝙧𝙨𝙩𝙪𝙫𝙬𝙭𝙮𝙯𝟬𝟭𝟮𝟯𝟰𝟱𝟲𝟳𝟴𝟵"
 94       );
 95     },
 96     nine: function () {
 97       return neat(
 98         this.scanf,
 99         "𝙰𝙱𝙲𝙳𝙴𝙵𝙶𝙷𝙸𝙹𝙺𝙻𝙼𝙽𝙾𝙿𝚀𝚁𝚂𝚃𝚄𝚅𝚆𝚇𝚈𝚉𝚊𝚋𝚌𝚍𝚎𝚏𝚐𝚑𝚒𝚓𝚔𝚕𝚖𝚗𝚘𝚙𝚚𝚛𝚜𝚝𝚞𝚟𝚠𝚡𝚢𝚣𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿"
100       );
101     },
102   },
103 });
View Code

 

三、clipboard.js实现点击文字直接复制到剪贴板

想做一个点击以后直接把文字复制到剪贴板的效果,试过document.execCommandclipboardData,但是都没有实现,要么是只适用于ie浏览器,要么是只能用在input上。

我水平不够,希望能早点做出效果,就没研究api直接照着网上的代码改了一下就用了。

参考的是这个:

改动以后的代码 clipboard.js实现文本复制

document.querySelector("#one").onclick = copy("#one");
document.querySelector("#two").onclick = copy("#two");
document.querySelector("#three").onclick = copy("#three");
document.querySelector("#four").onclick = copy("#four");
document.querySelector("#five").onclick = copy("#five");
document.querySelector("#six").onclick = copy("#six");
document.querySelector("#seven").onclick = copy("#seven");
document.querySelector("#eight").onclick = copy("#eight");
document.querySelector("#nine").onclick = copy("#nine");
function copy(name) {
  //通过function复制
  var clipboard = new Clipboard(name, {
    // 通过target选择需要被复制的对象
    target: function () {
      return document.querySelector(name); //复制标签文本
    },
  });

  clipboard.on("success", function (e) {
    //复制成功之后的回调
    console.log(e);
    //提示:这里是个坑,需要手动销毁当前的clipboard,否则会触发两次事件
    clipboard.destroy();
  });

  clipboard.on("error", function (e) {
    //执行失败后需要做的事...
    console.log(e);
    clipboard.destroy();
  });
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM