关于网页划词翻译

article/2025/10/7 4:01:37

  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

   

  

 

 

 

 

转载于:https://www.cnblogs.com/Lelpuchcr/archive/2013/05/07/3065024.html


http://chatgpt.dhexx.cn/article/7UXZDodQ.shtml

相关文章

基于Edge浏览器的沙拉划词插件使用教程(好用的翻译插件)

1.使用目的 - 使用沙拉划词实现网页多种翻译源进行实时翻译。 - 使用沙拉划词实现PDF翻译。 2.安装方法 2.1 打开edge扩展 点击工具栏右侧… 然后点击扩展 进入扩展 2.2 下载沙拉划词 2.2.1 点击获取扩展 2.2.2点击搜索 搜索沙拉划词 回车搜索 正常获取并添加扩展 出现沙…

PDF划词翻译软件

PDF划词翻译 一个简单的PDF划词翻译软件。 Github仓库地址&#xff1a;https://github.com/WCX1024979076/simple_pdf_translator Github下载地址&#xff1a; https://github.com/WCX1024979076/simple_pdf_translator/releases/tag/v0.1.0 Gitee仓库地址&#xff1a; htt…

推荐一个谷歌浏览器插件:划词翻译

地址&#xff1a;划词翻译插件 最近在看一些英文文档&#xff0c;遇到了一些词汇不认识&#xff0c;在谷歌浏览器上找到了这个翻译插件 谷歌浏览器自己有一个全文翻译的功能&#xff0c;对于一些技术类文档&#xff0c;有些词如果翻译错误了就会闹出笑话来&#xff0c;限于对…

一个简单的划词翻译工具

一个简单的划词翻译工具 看论文时经常要翻译&#xff0c;然而手动复制粘贴到翻译网站上又很麻烦&#xff0c;有些划词翻译工具比如有道的划词和取词&#xff0c;虽然不用按快捷键只选中文本就能翻译&#xff0c;但有时也会失灵什么的&#xff0c;于是就自己用python写了个调用百…

安装侧边翻译,划词翻译,看外文论文神器,比知云还好用Edge Translate

前言 写论文相信大家参考的大多数都是外文文献&#xff0c;但是想我这样英文水平不佳的小伙伴还是比较多的&#xff0c;所以看外文文献就很费劲。 有的小伙伴用谷歌或者百度翻译 一边复制翻译一边看&#xff0c; 后来用知云翻译方便的很多&#xff0c;但是每次…

论文阅读利器——划词翻译插件(桌面与浏览器)

对于喜爱学习&#xff0c;阅读文献的各位来说&#xff0c;满屏的英文字母常常会磨灭我们的热情&#xff0c;而一般的翻译软件又有些贵&#xff0c;或者是根本没有很好的效果。 那么&#xff0c;今天&#xff0c;在这里介绍几款开源的插件与软件。都是可以免费使用的。 一、Edg…

5个超好用的屏幕划词翻译软件,选中文字就能翻译

分享5个划词翻译工具&#xff0c;支持翻译多种语言&#xff0c;并且有多种翻译源和词典可以选择&#xff01; 一、划词翻译插件 1、Talent划词翻译 一个好用的划词翻译插件&#xff0c;支持Chrome、Edge、360等主流浏览器&#xff0c;安装之后选中词汇或者短句就会自动进行翻译…

递归算法整理合集

递归算法整理合集 ​递归是常见的算法和编程思想&#xff0c;也是初学者几乎最早接触的算法思想之一。递归算法的优点是代码简洁清晰&#xff0c;逻辑简单易懂&#xff1b;缺点一是算法运行复杂度较高&#xff0c;二是容易在具体代码实现的时候调用栈的层次考虑不周&#xff0…

【关于递归算法的讲解】

递归算法 递归算法的思想 利用递归求解问题的三个特性 递归算法求解的执行过程 递推关系 递归算法的应用举例 小结 递归算法 递归算法是一种通过自身调用自身或间接调用自身来达到问题解决的算法。递归的基本思想是把一个要求解的问题划分成一个或多个规模更小的子问题…

递归算法即案例

递归&#xff08;recursion&#xff09;&#xff1a;程序调用自身的编程技巧。 递归满足2个条件&#xff1a; 1. 有反复执行的过程&#xff08;调用自身&#xff09; 2. 有跳出反复执行过程的条件&#xff08;递归出口&#xff09; 项目中用到递归案例 递归读取文件获取字典…

【递归算法】递归算法的快速入门

&#x1f40b;作者简介&#xff1a;博主是一位.Net开发者&#xff0c;同时还是RPA和低代码平台的践行者。 &#x1f42c;个人主页&#xff1a;会敲键盘的肘子 &#x1f430;系列专栏&#xff1a;数据结构与算法 &#x1f980;专栏简介&#xff1a;图解经典算法&#xff0c;C#代…

递归算法详细解析

递归 程序调用自身的编程技巧称为递归&#xff08; recursion&#xff09;&#xff0c;它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。一般来说&#xff0c;递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时&#xff0c;递归前…

递归算法详解

递归&#xff08;英语&#xff1a;recursion&#xff09;在电脑科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。 0、前言 递归其实和循环是非常像的&#xff0c;循环都可以改写成递归&#xff0c;递归未必能改写成循环&#xff0c;这是一个充分不必要的条…

递归算法及经典递归实现

递归 递归就是方法自己调用自己&#xff0c;每次调用时传入不同的变量&#xff0c;递归有助于编程者解决复杂的问题&#xff0c;同时可以让代码变得简洁。 递归&#xff1a; 在定义自身的同时又出现了对自身的调用 直接递归函数&#xff1a; 在定义函数体中直接调用自己 间接…

递归算法讲解

原作者&#xff1a;书呆子Rico 《递归的内涵与经典应用》 http://my.csdn.net/justloveyou_ 摘要&#xff1a; 大师 L. Peter Deutsch 说过&#xff1a;To Iterate is Human, to Recurse, Divine.中文译为&#xff1a;人理解迭代&#xff0c;神理解递归。毋庸置疑地&#xff0…

递归算法及经典实例----转载啦~

递归算法及经典递归例子代码实例 递归&#xff08;recursion&#xff09;&#xff1a;程序调用自身的编程技巧。 递归满足2个条件&#xff1a; 1&#xff09;有反复执行的过程&#xff08;调用自身&#xff09; 2&#xff09;有跳出反复执行过程的条件&#xff08;递归出…

递归算法的讲解

原作者&#xff1a;书呆子Rico 《递归的内涵与经典应用》 http://my.csdn.net/justloveyou_ 摘要&#xff1a; 大师 L. Peter Deutsch 说过&#xff1a;To Iterate is Human, to Recurse, Divine.中文译为&#xff1a;人理解迭代&#xff0c;神理解递归。毋庸置疑地&#xff0…

递归算法经典例题及详解

有句话叫递归算法只可意会不可言传&#xff0c;我也领略了&#xff0c;感觉递归算法好神奇&#xff0c;不知不觉的就把工作做完了! 下面这道题也是小编从力扣上看来得&#xff0c;但是关于它是怎样递归的是小编自己想的哦❤️❤️如果有不足&#xff0c;希望大家多多指正&#…

递归算法及经典递归例子代码实现

一、什么叫做递归&#xff1f; 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法&#xff1b; 递归函数就是直接或间接调用自身的函数&#xff0c;也就是自身调用自己&#xff1b; 二、一般什么时候使用递归&#xff1f; 递归时常用的编程技术&#xff0c;其基本…

递归算法(图文详解)

递归算法 一、算法概述 递归算法是一种直接或者间接调用自身函数或者方法的算法。说简单了就是程序自身的调用。二、算法实质 递归算法就是将原问题不断分解为规模缩小的子问题&#xff0c;然后递归调用方法来表示 问题的解。&#xff08;用同一个方法去解决规模不同的问题&am…