最近想做一个 Chrome 的插件(看别的博客说其实叫插件不准确,应该叫拓展,大家叫习惯了就按习惯的来吧)。一开始咱先直接看了[Chrome 开发(360 翻译)](http://open.chrome.360.cn/extension_dev/overview.html)和[chrome extensions](https://developer.chrome.com/extensions)(这个官方的文档拓展的方法和属性有表格比较好找,但得会科学上网),之后卡住了开始上网搜发现[【干货】Chrome 插件 (扩展) 开发全攻略](http://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html)这篇博客写的已经很全了,而且附带的 GitHub 上的 demo 也特别全。咱这里就稍微把咱做的插件遇到的问题写一写(几乎都是看文档和那个博客解决的)。

# [谷歌页面翻译增强插件](https://github.com/1010543618/google-page-translation-plus)

# 一:如何点击 Popup 中的按钮,操作当前打开的网页的 DOM

坑:

1. 给 Popup.html 中的 button 添加内联的 click 事件(会报安全策略不允许的错误)
解决:让 Popup.html 引入 Popup.js 文件,js 文件通过 id 找到 button 添加 click 事件

2. 在 Popup.js 里想办法获取到当前打开的网页的 window 对象操作其 DOM(咱是找了很久也没找到获取到的方法)
解决:
方案一:在 Popup.js 里使用 chrome.tabs.executeScript 让页面执行一段代码或一个 js 文件(这个方案能在进行只是让页面执行 js 时使用)。
方案二: 在 Popup.js 里使用 chrome.tabs.sendMessage 发送给 content-script(通过配置 manifest.json 的 content_scripts 插入到当前打开网页中的 js 文件)消息执行 content-script 中的代码(这个方案能在进行让页面执行 js 并接受返回消息时使用)。

# 二:如何进行数据的存储

咱想做的是先保存网页中的 pre 标签中的 html,然后翻译此网页,然后将保存的 pre 内容进行还原。

1. 保存网页中的 pre 标签中的内容
在 Popup.js 里使用 chrome.tabs.sendMessage 发送给 content-script 消息执行获取全部 pre 标签中的 html 返回给 Popup.js,Popup.js 使用 localStorage 进行保存。

2. 翻译此网页
在 Popup.js 里获取当前页面 url,并进行谷歌翻译

3. 将保存的 pre 内容进行还原
在 content-script 中根据 url 判断是否是翻译过的页面,是的话给 Popup 发消息得到 pre 标签中的 html,将当前页面的 pre 标签中的 html 替换为刚刚得到的。

注:咱原本想用长连接的,但翻译网页时网页变了,长连接就断了,所以只能互相发消息

# 三:如何得知页面是否处理过或是否可编辑了

因为是每个页面的状态所以,在翻译的页面使用 DOM 节点保存一下

Chrome-谷歌页面翻译增强插件开发的更多相关文章

  1. Chrome谷歌页面翻译增强插件开发

    最近想做一个Chrome的插件(看别的博客说其实叫插件不准确,应该叫拓展,大家叫习惯了就按习惯的来吧).一开始咱先直接看了Chrome开发(360翻译)和chrome extensions(这个官方的 ...

  2. windows如果在IE中用超链接打开谷歌页面

    Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\openChrome] @="URL:openChrome Protocol& ...

  3. 使用chrome查看页面元素的css样式

    使用chrome查看页面元素的css样式 我们在写页面的时候,可能总是不知道怎么回事,就发现某个元素出现了问题,但是不知道为什么会这样,这时候,就需要使用强大的chrome了!!! 举例说明: 1. ...

  4. 使用 Headless Chrome 进行页面渲染 - 知乎专栏

    使用 Headless Chrome 进行页面渲染 - 知乎专栏 使用 Headless Chrome 进行页面渲染 - 知乎专栏 这里我们使用 chrome-remote-interface 来远程 ...

  5. Chrome/谷歌开发者工具分析

    Chrome/谷歌开发者工具还是要好好掌握一下,对于前端开发超级有用:https://developers.google.com/web/tools/chrome-devtools/ 1.js内存使用 ...

  6. chrome浏览页面常用快捷键

    1.chrome浏览页面常用快捷键 Ctrl+N 打开新窗口. Ctrl+T 打开新标签页. Ctrl+W关闭当前标签 Ctrl + F4 关闭chrome浏览器 Ctrl+Tab 或 Ctrl+Pg ...

  7. Chrome划词翻译-Saladict

    Saladict 沙拉查词是一款专业划词翻译扩展,为交叉阅读而生.大量权威词典涵盖中英日韩法德西语,支持复杂的 划词操作.网页翻译.生词本.PDF,以及 Vimium 全键盘操作 . 迄今为止最好用的 ...

  8. 使用Chrome测试页面响应性

    如今我们都知道 响应式 的意思.作为开发者,我们常常开发一些响应式的应用.有很多工具可以帮助我们完成这个目的.某些人甚至使用付费扩展.然而,我用了一个东西,它就是 Google Chrome 浏览器. ...

  9. Chrome 谷歌开发者工具使用窍门

    我们这里介绍主要的几块:Console.Source.Network Console 大家都有用过各种类型的浏览器,每种浏览器都有自己的特色,本人拙见,在我用过的浏览器当中,我是最喜欢Chrome的, ...

随机推荐

  1. 关于static以及final关键字

    Static关键字: 可以用来修饰类中的属性.类中的方法.以及具体的某一个类. 1.用于修饰属性: 则表示该属性属于整个类,不论有多少个对象实例,所有的实例共同拥有一个static静态的成员变量.该变 ...

  2. List带索引的常用方法,以及集合的三种遍历

    package cn.learn.collection.List; import com.sun.source.tree.NewArrayTree; import java.util.ArrayLis ...

  3. Communications link failure mysql自动停止 连接拒绝 mysqld dead but sub。。。

    服务器环境中 JAVA 连接数据库 Communications link failure, Contection refused 网上很多这种情况,解决基本上是将127.0.0.1换成localho ...

  4. Codeforces 1080C 题解(思维+二维前缀和)

    题面 传送门 题目大意: 有一个黑白的棋盘,现在将棋盘上的一个子矩形全部染成黑色,另一个子矩形全部染成白色 求染完色后黑,白格子的总数 分析 我们可以发现,对于一个(1,1)到(x,y)的矩形,若xy ...

  5. 有关css的兼容问题

    兼容性 1    页面在不同浏览器中可能显示不同  在IE6下 子级的宽度会撑开父级设置好的宽度   温馨提示:和模型的计算一定要精确,IE浏览器可能显示不同   兼容性 2    在IE6中,元素浮 ...

  6. ubuntu16.04编译linux3.9内核

    下载linux内核 解压内核 tar -xvf 安装低版本gcc,不然会报错 apt-cache search gcc-4.7 sudo apt-get install 搜索的名字 设置默认gccsu ...

  7. rpmgraph - 显示 RPM 软件包依赖关系图

    SYNOPSIS rpmgraph PACKAGE_FILE ... DESCRIPTION rpmgraph 使用 PACKAGE_FILE 参数来产生一个软件包依赖关系图.每个 PACKAGE_F ...

  8. idea模块搭建新手党常见错误

    一.搭建java和web模块会出现的错误(此篇以分布式模块为例) 1.创建空工程 1.点击file ,在弹出的窗口左侧选项中在最后有一个Empty Project选项.此处就是创建空工程. 2.在此空 ...

  9. ES6 的基础教程

    一.介绍 1.历史 ECMAScript和JavaScript ECMA是标准,JS是实现 类似于HTML5是标准,IE10.Chrome.FF都是实现 换句话说,将来也能有其他XXXScript来实 ...

  10. Sass函数-数字函数-floor()函数

    floor() 函数刚好与 ceil() 函数功能相反,其主要将一个数去除其小数部分,并且不做任何的进位.也就是只做舍,不做入的计算: >> floor(2.1) 2 >> f ...