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

谷歌页面翻译增强插件

一:如何点击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 翻译)](http://open.chrom ...

  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. 搜索专题: HDU1428漫步校园

    漫步校园 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  2. T-聊天止于呵呵

    (现代版)俗话说:流言止于智者,聊天止于呵呵.输入一段聊天记录,你的任务是数一数有 多少段对话“止于呵呵”,即对话的最后一句话包含单词 hehe 或者它的变形. 具体来说,我们首先提取出对话的最后一句 ...

  3. C#修改电脑桌面图

    win32helper public class Win32Helper { [DllImport("user32.dll", EntryPoint = "SystemP ...

  4. LazyMan的深入解析和实现

    一.题目介绍 以下是我copy自网上的面试题原文: 实现一个LazyMan,可以按照以下方式调用: LazyMan("Hank")输出: Hi! This is Hank!   L ...

  5. grep 文本过滤

    1.命令功能 grep, egrep, fgrep - print lines matching a pattern 根据匹配模式空间(正则表达式)打印结果行. 2.语法格式 grep   [opti ...

  6. 如何设置Linux虚拟机的IP地址

    本文会详细的解释如何在Linux虚拟机下设置IP地址 我的虚拟机是CentOS 首先,打开你的虚拟机 1.修改主机名 修改完主机名之后,别忘了用:wq命令保存退出 然后我们来设置虚拟机的IP地址 首先 ...

  7. vue 之 双向绑定原理

    一.实现双向绑定 详细版: 前端MVVM实现双向数据绑定的做法大致有如下三种: 1.发布者-订阅者模式(backbone.js) 思路:使用自定义的data属性在HTML代码中指明绑定.所有绑定起来的 ...

  8. 在父组件中,传值给子组件-vue

    1.通过 props <x-test :name="username"></x-test>1)props为字符串数组 props: ['name']2)pr ...

  9. Django【第22篇】:基于Ajax实现的登录

    基于ajax实现的登录 一.需要知道的新知识点 1.刷新验证码.给src属性加一个?号.加个?会重新去请求 //#给验证码刷新 $(".vialdCode_img").click( ...

  10. java:集合输出之Iterator和ListIterator二

    java:集合输出之Iterator和ListIterator二 ListIterator是Iterator的子接口,Iterator的最大特点是,能向前,或向后迭代.如果现在要想双向输出的话,则只能 ...