zoukankan      html  css  js  c++  java
  • 关于网页划词翻译

      2013-4-21

      近日偶然看到js页面文字选中后分享到新浪微博实现,发现原来竟然只要一句话就可以实现获取划词。便萌生自己写个划词翻译的东东,方便自己看文档。

      我首先想到了之前看到的油猴插件,最早是在看优酷去广告插件的原理时知道这个东西。感觉其原理是在 server 发的 response 页面上嵌入了自己写的js脚本,以达到邪恶的目的。

      注:Chrome的脚本叫,Tampermonkey,或者可以用网上写的不用插件的方法。 

      实现思路是,获取划词,然后建一个iframe,内嵌网页为有道词典的网页版http://dict.youdao.com/   组查询链接比如 http://dict.youdao.com/search?le=eng&q=zzzzz  表示查询zzzzz。

      效果:

      

      实现代码:

     1 var di;
     2 var div_id = 'translate_word';
     3 di = document.getElementById(div_id);
     4 
     5 // make di
     6 if(!di){
     7     di = document.createElement("DIV");
     8 }
     9 di.id = div_id;
    10 di.style.position = 'absolute';
    11 di.style.backgroundColor='white';
    12 document.body.appendChild(di);
    13 
    14 var get_selected_word = function(){
    15     var txt = '';
    16     //not support ie6 (which can not use this script :P)
    17     txt = document.getSelection();
    18     return txt.toString();
    19 }
    20 var ifr = document.createElement('iframe'); 
    21 ifr.id = 'yd_translat_ifr';
    22 document.onmouseup = function(e){
    23     //alert("asdf");
    24     var txt = get_selected_word();
    25     sh = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
    26     var left = (e.clientX - 40 < 0) ? e.clientX + 20 : e.clientX - 40;
    27     var top = (e.clientY - 40 < 0) ? e.clientY + sh + 20 : e.clientY + sh - 40;
    28     if(txt){
    29         top = top + 80;
    30         di.style.top = top + "px";
    31         ifr.src = "http://dict.youdao.com/search?le=eng&q=" + get_selected_word();
    32         ifr.height = 300;
    33         ifr.width = 1000;    
    34         document.getElementById(di.id).appendChild(ifr);
    35     }else{
    36         if(document.getElementById(di.id).firstChild){
    37             document.getElementById(di.id).removeChild(document.getElementById(di.id).firstChild);
    38         }   
    39     }
    40 }

      

    2013-5-7

      分析有道划词插件

      我猜想既然如此简单,有道肯定有自己的划词翻译,根据我的猜测,他的插件肯定得调用他的查询接口。通过chrome查看请求应该能获取能得到他的公共接口。(注:其实有道有提供公共api,不过得注册,oauth验证等,比较麻烦。)

      

      由图可见,划词时client只得到了第一条test.开头的flash,鼠标每次移在声音按钮上后便向server请求此词的声音。

      最重要的翻译结果在哪里?。。。

      手贱 , 意外发现:

       

      话说看到这个我的心情小小的激动了下,chrome就是好啊,开源就是好。。。

      然后发现了youdao的公用webservice(xml格式的)

      比如查询abc

      js组的 查询请求:

    1         var url = 'http://dict.youdao.com/fsearch?client=deskdict&keyfrom=chrome.extension&q='+encodeURIComponent(word)+'&pos=-1&doctype=xml&xmlVersion=3.2&dogVersion=1.0&vendor=unknown&appVer=3.1.17.4208&le=eng'
    2         xhr.open('GET', url, true);
    3         xhr.send();

      用ajax实现,其实 http://dict.youdao.com/fsearch?q=abc 就行了,个人使用就用这个webservice把,免费的,不验身份,无限调用的。

      client 字段,keyfrom等,我猜测可能是youdao用来统计,各个产品的调用数量吧。。

      我觉得其实chrome的插件就是个新的网页(不然会存在跨域问题),激活插件就=在后台开了个页面。

      可是为什么我在xxx页面划词,会得到查询结果呢?

      通过查看源码,惊讶的发现此为options.js的代码仅仅是插件的popup的查询模块代码,与划词翻译没有关系。囧。

      看代码时顺便看出个代码错误。

      document.getElementsByName('word').focus();   囧~

      意外发现中文版chrome插件文档(感谢360攻城狮)http://open.chrome.360.cn/extension_dev/overview.html

       

      

    这是签名?
  • 相关阅读:
    python操作adb代码
    android sdcard 权限管理策略研究
    glom模块的使用(二)
    爬虫错误汇总
    微博展开全文获取
    数据清洗之微博内容清洗
    Esxi5-管理平台vcenter5.0_数据库迁移流程
    migrating-vcenter-database-express-to-sql-2008-r2
    Centos生成SSL证书的步骤
    找到一篇关于2.4/5G信道的新介绍
  • 原文地址:https://www.cnblogs.com/Lelpuchcr/p/3065024.html
Copyright © 2011-2022 走看看