感谢插件作者 IkariEnator 的投递。

刚刚编写了一个Chrome的扩展,这个插件是为了能够在各个窗口之间同步打开或关闭搜狗云输入法的小窗口的,我想Linux用户或者开始玩ChromeOS的朋友们一定用的上(妄想ChromeOS可以快点装上扩展吧。。。)。
搜狗云输入法必须在每一次刷新页面后重新打开,现在不必了,打开或关闭一次可以在浏览器页面间保持一致而不受到刷新的影响。
不过出人意料的是,制作起来还遇到些小麻烦。现在把这个插件的制作过程记录一下,以免有些地方新手上当:)。
1. 首先是manifest.json文件,这个文件是每个Chrome扩展的入口,里面提供该扩展一些信息:伺服页面的文件、按钮、内容注入和主题统统是从这个文件里索引。注意这是一个严格要求格式的JSON,和一般的JS是有区别的。至于JSON“语言”的详情请Google。
按照这个文件的定义来说,可以确定的一点是,就目前来看,一个扩展只能有一个按钮(要么就没有按钮)。但是可以有很多组内容注入。manifest.json还提供了安全性的选项,包括对浏览器的功能调用的限制需求,一起跨域请求的需求等。从这里来看,Chrome很可能在将来的某一天能通过这些安全需求来向用户提示扩展的安全性。我们下面会看到,在某些情况下Chrome扩展会带来安全性的问题。
2. 伺服页面是一个普通的网页,可以载入当前域(chrome://插件ID/)下的文件,包括脚本、CSS、图片等等。令人惊讶的是这个看不见的网页上面HTML5的canvas工作非常良好。要注意的就是从这个页面无论如何也拿不到其他真正的页面的DOM。要进行一些操作的话必须对其他页面的内容注入脚本发送消息。另外一点就是不能通过这个页面直接跨域注入,这造成在首次载入插件的时候,已经打开的页面就没办法访问了。估计Chrome会找出个对策来。毕竟不会有很多人装一个插件就把所有页面重新刷新一遍的。
3. 内容注入。可以注入的内容有脚本和CSS。所谓内容注入(Content Scripts)就是当Chrome打开每一个符合要求页面的时候,就强制地把你指定的内容插进去。神奇的是,可以通过配置manifest.json文件来选择诸如脚本的时机,比如是文档载入开始、结束还是中途等等。遗憾的是如上面一点所说,不存在对已经打开的页面进行注入的方法。
注入脚本有很多需要提的地方:
a) 注入的脚本不能直接调用页面的javascript对象(反过来也不行),但是却可以操作DOM。更神奇的是可以向window里写script标签(无论是内联的还是引用式的),而且运行正常。按照Google自己的话说,不能访问页面的javscript对象是为了防止重名而不是为了解决安全问题。
b) 注入脚本如果向页面写了script,那么这个script不仅不能调用注入脚本,还不能访问chrome的API。它唯一和插件的主题进行通讯的机制是通过DOM的Event。
4. 按钮。按钮不仅可以设置图片和工具提示,还有一种默认的显示一小段文字的方法,挺好看的。。注意按钮上面可以加一个popup窗口,这个popup窗口每次重建。并且如果指定了(在manifest.json中)它,那么就永远改不了了。而且在有popup窗口的时候,按钮就不再响应click事件了,所以虽然很好看,还是要慎用。
5. debug。debug比较简单。如果要debug伺服页面或者popup(好像一次只能debug一个,知道怎么Debug多个的人请告诉我),就在chrome://extensions/页面里面点Inspect的连接,如果要debug配置或者内容诸如页面,就在相应的页面点Inspect就好。注意在Extensions页面点击了reload以后那些DeveloperTools的页面虽然还留着,但是已经失效了。如果不小心用旧的developer tools页面来调试的话,很容易崩溃。Developer Tools虽然不是那么成熟稳定,但是实在非常强大,再次向Google的大牛们致敬。
6. 打包。注意一点就是,打包的时候会把整个文件夹的所有东西进行打包,如果你想挑一部分出来的话就手动来吧,或者写个脚本或者Makefile。以前的打包命令好像已经失效了,不过在Extesions页面里面已经可以进行打包了。
打包的时候会生成一个密钥,这个密钥将来可以签名这个扩展的后续版本。打包和密钥联系起来,可以防止别人谎称是你的扩展的升级版本,而且密钥保证了不可抵赖性。不过不牵扯PKI的话总是不安全的,这一点将来可能会有改进。总之注意就是生成出来的密钥不要到处放就好了。
这里没有涉及主题的制作问题,因为这个扩展没有带主题,而且我也不会美工:)。我打算密切关注扩展的新进展,并且向广大谷粉及时汇报。。。
这个扩展现在可以下载了:
包: http://sogou-pinyin-chrome-extension.googlecode.com/files/sogou-pinyin-extension-0.0.1.crx
源代码(hg)太少了,没写注释(囧):http://code.google.com/p/sogou-pinyin-chrome-extension/source/checkout
Related posts
- Google 发布全球搜索量视觉化统计网站 Search Globe
- Windows 平台的 Chrome 会通过扳手图标提醒用户更新浏览器
- Chrome Dev 分支全平台升级到 5.0.360.0
- Chrome Dev 分支全平台升级到 14.0.825.0,增加多帐户登录图标
- Chromium 最新版 UI 布局发生变化,更加简洁
- Chrome 扩展 Super Google Reader 把所有 RSS 都变成全文输出
- 从 Facebook 导入好友到 Google+ 的 Chrome 扩展迅速被封
- Autopen:支持落款图片的 Gmail 签名档管理 Chrome 扩展
- 让你的 Chrome 新标签页更酷更实用的 Chrome 扩展
- 搜集 Google Buzz 第三方应用的网站 BuzzAware
转载请注明:文章转载自:谷奥——探寻谷歌的奥秘 [http://www.guao.hk]
本文标题:Chrome 扩展:搜狗云输入法集成(附制作心得)
本文地址:http://www.guao.hk/posts/chrome-extensions-sogou-cloud-ime.html
本文短网址:http://guao.cc/NFI






搜狗云输入法 Chrome 扩展:比吃饭还要简单
http://pinyin.sogou.com/bbs/viewthread.php?tid=161324&extra=page%3D1
很好啊,但是还可以更好啊,期待改进
当时搜狗晕输入法刚出来的时候我就觉得应该出一个扩展,现在终于出来了~~
期待改进~~
注入脚本sogou-daemon.js 向页面写的 checkState.js 通信 event 比较好吧
现在这种每次通信 daemon 都写段 js 到页面不是很好,切换几次搞了一堆
open();
close();
open();
close();
....
为什么有的网页这个输入法没用啊,难道还要刷新
有点问题,在鼠标移上去之后会出现乱码
@lepture:
用native2ascii处理一遍js(包括main.js和checkState.js)里面的中文就好了
没有什么可以替代的。还是不错。就是速度不是特别快。试试。不过还挺方便de
这个有点意思啊!!!!!
为什么打开这个页面和搜狗云输入法的主页面会出现云输入法的浮动栏进行输入,
其他页面就不行了呢,比如gmail??
@wumingjun:
那很可能是扩展的一个bug,根据文档所说的,内容注入只会在主frame里进行,但是好像所有的frame都注入了,我会看看怎么解决这个问题。
已经远离搜狗拼音的人飘过~~~~~~~
@wumingjun:
是啊,怎么办
好像在多frame的网页中,一下子出现n个图标,希望尽快解决
还不错~
不错,就是在windows下有时会出现乱码的现象
hover 到 icon 上 , title是亂碼。。
還是用英文吧。