javascript 多种搜索引擎集成的页面实现代码


Posted in Javascript onJanuary 02, 2010

- 输入一个关键词,鼠标点击后面的搜索引擎链接,即可进入到该引擎的页面
- 如果输入关键词后敲回车,则使用默认搜索引擎,而每选择新的搜索引擎,默认引擎也会随之改变
- 自动记忆上次使用的搜索引擎,后面添加*
javascript 多种搜索引擎集成的页面实现代码
源代码如下,使用了多种IE/FF的适应办法:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
<style type="text/css"> 
<!-- 
.normal {font-family: "Verdana","Arial";font-size:14px} 
.small {font-family: "Verdana","Arial";font-size:12px} 
body { font-family: "Verdana","Arial";font-size:14px} 
td {font-family: "Verdana","Arial";font-size:14px} 
th {font-family: "Verdana","Arial";font-size:15px} 
input {font-family: "Verdana","Arial";font-size:14px} 
a {text-decoration:underline; color:blue} 
a:link { text-decoration:underline; color: blue } 
a:visited { text-decoration:underline; color: blue } 
a:hover { text-decoration: underline; color: red } 
--> 
</style> 
<title>My Portal</title> 
<script language="javascript"> 
// 这一段使得FireFox也支持IE的innerText方法 
function isIE(){ 
if (window.navigator.userAgent.toLowerCase().indexOf("msie")>=1) 
return true; 
else 
return false; 
} 
if(!isIE()){ //firefox innerText define 
HTMLElement.prototype.__defineGetter__( "innerText", 
function(){ 
var anyString = ""; 
var childS = this.childNodes; 
for(var i=0; i <childS.length; i++) { 
if(childS[i].nodeType==1) 
anyString += childS[i].tagName=="BR" ? '\n' : childS[i].innerText; 
else if(childS[i].nodeType==3) 
anyString += childS[i].nodeValue; 
} 
return anyString; 
} 
); 
HTMLElement.prototype.__defineSetter__( "innerText", 
function(sText){ 
this.textContent=sText; 
} 
); 
} 
// 这一段使得FireFox的HTMLElement具有click方法(add click method to HTMLElement in Mozilla) 
try { 
// create span element so that HTMLElement is accessible 
document.createElement('span'); 
HTMLElement.prototype.click = function () { 
if (typeof this.onclick == 'function') 
this.onclick({type: 'click'}); 
}; 
} 
catch (e) { 
// alert('click method for HTMLElement couldn\'t be added'); 
} 
// 对HTMLAnchorElement 加入onclick事件 
try { 
// create a element so that HTMLAnchorElement is accessible 
document.createElement('a'); 
HTMLElement.prototype.click = function () { 
if (typeof this.onclick == 'function') { 
if (this.onclick({type: 'click'}) && this.href) 
window.open(this.href, this.target? this.target : '_self'); 
} 
else if (this.href) 
window.open(this.href, this.target? this.target : '_self'); 
}; 
} 
catch (e) { 
// alert('click method for HTMLAnchorElement couldn\'t be added'); 
} 
// 跟踪回车键事件 
function captureKeys (evt) { 
var keyCode = evt.keyCode ? evt.keyCode : 
evt.charCode ? evt.charCode : evt.which; 
if (keyCode == 13) { 
// cancel key: 
if (evt.preventDefault) { 
evt.preventDefault(); 
} 
var dq = getCookie('default-engine'); 
if( dq == null) dq = "baidu_txt"; 
submit_query( dq ); 
return false; 
} 
return true; 
} 
// cookie 功能函数 
function getCookie(cookieName) 
{ 
var cookieString = document.cookie; 
var start =cookieString.indexOf(cookieName+'='); 
if(start == -1) 
return null; 
start += cookieName.length + 1; 
var end = cookieString.indexOf(';', start); 
if(end == -1) 
return unescape(cookieString.substring(start)); 
return unescape(cookieString.substring(start,end)); 
} 
function setCookie(cookieName, cookieValue) 
{ 
var expires = new Date(); 
expires.setTime( expires.getTime() + 3*30*24*60*60*1000); // 3 months 
document.cookie = cookieName + '=' + escape(cookieValue)+';expires='+expires.toGMTString(); 
} 
function removeCookie(cookieName) 
{ 
var expires = new Date(); 
expires.setTime( expires.getTime() - 1); 
document.cookie = cookieName + '=fooxxx;expires='+expires.toGMTString(); 
} 
function $(id) { 
return document.getElementById(id); 
} 
// 调式Object用,适用于IE,Firefox下可用firebug 
function dumpObject(obj) 
{ 
var temp=""; 
for (x in obj) 
temp += x + ": " + obj[x] + "\n"; 
var popup = window.createPopup(); 
popup.document.body.innerHTML = '<textarea rows=30 cols=40>' + temp + '</textarea>'; 
popup.show(100, 100, 300, 400, document.body); 
} 
// 多种查询引擎请求分派 
function submit_query(t_query) 
{ 
var keyword = document.getElementById("keyword"); 
var mylink = document.getElementById("mylink"); 
var loc = ""; 
switch(t_query) 
{ 
case "baidu_txt": 
loc = "http://www.baidu.com/s?wd=" + keyword.value; 
break; 
case "baidu_img": 
loc = "http://image.baidu.com/i?ct=201326592&lm=-1&tn=baiduimagenojs&pv=&word=" + keyword.value + "&z=0&pn=0&rn=16&cl=2"; 
break; 
case "yodao_txt": 
loc = "http://www.yodao.com/search?q=" + encodeURI(keyword.value) + "&ue=utf8&keyfrom=web.index"; 
break; 
case "yodao_img": 
loc = "http://image.yodao.com/search?q=" + encodeURI(keyword.value) + "&ue=utf8&keyfrom=image.index"; 
break; 
case "yodao_dict": 
loc = "http://dict.yodao.com/search?q=" + encodeURI(keyword.value) + "&ue=utf8&keyfrom=dict.index"; 
break; 
case "yodao_blog": 
loc = "http://blog.yodao.com/search?q=" + encodeURI(keyword.value) + "&ue=utf8&keyfrom=blog.top"; 
break; 
case "iask_ditu": 
loc = "http://ditu.iask.com/a/r.php?cl=北京&key=" + keyword.value; 
break; 
case "verycd": 
loc = "http://www.verycd.com/search/folders/" + encodeURI(keyword.value); 
break; 
case "google_txt": 
loc = encodeURI("http://www.google.com/search?hl=en&q=" + keyword.value +"&btnG=Google+Search"); 
break; 
case "yahoo_txt": 
loc = "http://search.yahoo.com/search?p="+encodeURI(keyword.value)+"&vc=&fr=yfp-t-501&toggle=1&cop=mss&ei=UTF-8&fp_ip=CN"; 
break; 
case "trans_en": 
loc = "http://209.85.171.104/translate_c?hl=en&sl=en&tl=zh-CN&u=http://" + keyword.value + "/&usg=ALkJrhijPevZUxPtrHDj94k1U9Wo8x7S8g"; 
break; 
case "google_code": 
loc = "http://www.google.com/codesearch?q=" + keyword.value + "&hl=en&btnG=Search+Code"; 
break; 
case "google_scholar": 
loc = "http://scholar.google.com/scholar?q=" + keyword.value + "&hl=en&lr=&btnG=Search"; 
break; 
} 
setEngine(t_query); 
setCookie('default-engine', t_query); 
mylink.href= loc; 
mylink.click(); 
} 
function getDefaultEngine() 
{ 
var dq = getCookie('default-engine'); 
if( dq == null) dq = "baidu_txt"; 
return dq; 
} 
function setDefaultEngine() 
{ 
var old_e = getDefaultEngine(); 
if( $(old_e).innerText.indexOf('*') < 0) 
$(old_e).innerText = $(old_e).innerText + '*'; 
} 
function setEngine( new_e ) 
{ 
var old_e = getDefaultEngine(); 
if( $(old_e).innerText.indexOf('*') >= 0) 
$(old_e).innerText = $(old_e).innerText.replace('*',''); 
if( $(new_e).innerText.indexOf('*') < 0) 
$(new_e).innerText = $(new_e).innerText + '*'; 
setCookie('default-engine', new_e); 
} 
</script> 
</head> 
<body onload='setDefaultEngine()'> 
<table border="0" width="100%"> 
<tr><td> 
<a href="http://www.google.com" id="mylink" target="_blank">Search:</a> 
<input type="text" name="keyword" size="20" id="keyword" onkeypress="return captureKeys(event);"> 
<a href="#" id='baidu_txt' onclick="submit_query('baidu_txt')">百度</a>  
<a href="#" id='google_txt' onclick="submit_query('google_txt')">Google</a>  
<a href="#" id='yodao_txt' onclick="submit_query('yodao_txt')">有道</a>  
<a href="#" id='yodao_blog' onclick="submit_query('yodao_blog')">博客</a>  
<a href="#" id='google_code' onclick="submit_query('google_code')">代码</a>  
<a href="#" id='google_scholar' onclick="submit_query('google_scholar')">论文</a>  
<a href="#" id='baidu_img' onclick="submit_query('baidu_img')">百图</a>  
<a href="#" id='yodao_img' onclick="submit_query('yodao_img')">有图</a>  
<a href="#" id='yodao_dict' onclick="submit_query('yodao_dict')">词典</a>  
<a href="#" id='iask_ditu' onclick="submit_query('iask_ditu')">地图</a>  
<a href="#" id='verycd' onclick="submit_query('verycd')">CD</a>  
<a href="#" id='yahoo_txt' onclick="submit_query('yahoo_txt')">Yahoo</a>  
<a href="#" id='trans_en' onclick="submit_query('trans_en')">翻译</a>  
</td></tr> 
</table> 
</body> 
</html>
Javascript 相关文章推荐
通过event对象的fromElement属性解决热区设置主实体的一个bug
Dec 22 Javascript
javascript实现检验的各种规则
Jul 31 Javascript
jquery过滤特殊字符',防sql注入的实现方法
Aug 17 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
Nov 02 Javascript
Angularjs的键盘事件的绑定
Jul 27 Javascript
JavaScript递归算法生成树形菜单
Aug 15 Javascript
Vue组件之Tooltip的示例代码
Oct 18 Javascript
详解vue+css3做交互特效的方法
Nov 20 Javascript
Vue 莹石摄像头直播视频实例代码
Aug 31 Javascript
Vue-input框checkbox强制刷新问题
Apr 18 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
Feb 03 Javascript
jQuery-App输入框实现实时搜索
Nov 19 jQuery
让firefox支持IE的一些方法的javascript扩展函数代码
Jan 02 #Javascript
javascript getElementsByClassName 和js取地址栏参数
Jan 02 #Javascript
firefox插件Firebug的使用教程
Jan 02 #Javascript
firefox firebug中文入门教程 脚本之家新年特别版
Jan 02 #Javascript
Firefox+FireBug使JQuery的学习更加轻松愉快
Jan 01 #Javascript
20个非常棒的Jquery实用工具 国外文章
Jan 01 #Javascript
JavaScript与DropDownList 区别分析
Jan 01 #Javascript
You might like
骨王战斗力在公会成员中排不进前五,却当选了会长,原因竟是这样
2020/03/02 日漫
php全角字符转换为半角函数
2014/02/07 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
php与阿里云短信接口接入操作案例分析
2020/05/27 PHP
可输入的下拉框
2006/06/19 Javascript
有关于JS构造函数的重载和工厂方法
2013/04/07 Javascript
浅析JavaScript中两种类型的全局对象/函数
2013/12/05 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
2014/01/15 Javascript
jquery实现显示已选用户
2014/07/21 Javascript
jQuery插件pagewalkthrough实现引导页效果
2015/07/05 Javascript
jquery实现表单验证简单实例演示
2015/11/23 Javascript
mui上拉加载功能实例详解
2017/04/13 Javascript
基于 webpack2 实现的多入口项目脚手架详解
2017/06/26 Javascript
JS正则表达式完美实现身份证校验功能
2017/10/18 Javascript
jquery中有哪些api jQuery主要API
2017/11/20 jQuery
如何以Angular的姿势打开Font-Awesome详解
2018/04/22 Javascript
详解使用create-react-app添加css modules、sasss和antd
2018/07/31 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
微信小程序开发实现消息推送
2020/11/18 Javascript
微信小程序报错: thirdScriptError的错误问题
2020/06/19 Javascript
js实现简单的轮播图效果
2020/12/13 Javascript
Vue常用API、高级API的相关总结
2021/02/02 Vue.js
在matplotlib的图中设置中文标签的方法
2018/12/13 Python
python画微信表情符的实例代码
2019/10/09 Python
python 实用工具状态机transitions
2020/11/21 Python
乌克兰珠宝大卖场:Zlato.ua
2020/09/27 全球购物
模范教师事迹材料
2014/02/10 职场文书
电脑售后服务承诺书
2014/03/27 职场文书
教育系统干部作风整顿心得体会
2014/09/09 职场文书
优秀党支部申报材料
2014/12/24 职场文书
会计工作能力自我评价
2015/03/05 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书
Golang Gob编码(gob包的使用详解)
2021/05/07 Golang
关于flex 上下文中自动 margin的问题(完整例子)
2021/05/20 HTML / CSS
深入解读Java三大集合之map list set的用法
2021/11/11 Java/Android