怎么样把百度搜索引入自己的网站JS实现(附源代码)

news/2024/5/17 2:09:03/文章来源:https://blog.csdn.net/wyz52126/article/details/7770280
都见过这种效果吧

怎么样把他引入到自己的网站里面呢?下面咱们一起来分析一下吧

使用Ie9的”开发工具“可可以轻松获取到,在你输入一个关键字时百度是怎么获取智能提示,就是相关的关键字的。

一起来看一下吧

大家可以清楚的看到在我们每次修改查询框时,百度就是发一个Ajax请求去调相应的数据

地址就是:http://suggestion.baidu.com/su?wd=博客&p=3&cb=window.bdsug.sug&t=1324271669786

大家不难看出来吧,wd=博客 这个博客 就是我输入的关键字,如果你想使用其它的关键字的话,只需要动太的修改wd的值就行了。

这时大家一定会这样想,我们是不是只要发一个Get请求,只要每次在我们自己的网站上查询时动态的发一个Ajax请求去访问这个地址就行了呢?是的,

但大家一个不要傻着去使用Http请求,因为这样的请求是从你的服务器发起的,当然百度肯定是会封你的。

我们需要怎么做才能避免这个问题呢?

那就只有一个方法了,使用Js,在客户端执行请求。因为Js是在客户端发起的,就算是百度封的话,那它封的是所有过量使用你网站的用户,相信百度不会傻到这点上吧。因为这样他们失去很多用户

所以这个方法应该 是成立的

但是大家都知道Js是不能跨越访问的,而百度又不可能给你跨越的接口,或者是权限,我们应该怎么办呢?

简单,我们上面也看到了,Baidu给我们的是一个Jsonp的数据格式,那么我们就可以直接使用Jsonp的方法去发起Ajax请求了,因为返回Jsop格式数据的JS是可以跨越访问的

大家一起来看下我的代码吧。

复制代码
function FillUrls() {var strdomin = $.trim($("#Text1").val());var qsData = { 'wd': strdomin, 'p': '3', 'cb': 'ShowDiv', 't': '1324113456725' };$.ajax({async: false,url: "http://suggestion.baidu.com/su",type: "GET",dataType: 'jsonp',jsonp: 'jsoncallback',data: qsData,timeout: 5000,success: function (json) {},error: function (xhr) {alert(xhr);}});
}
复制代码

代码很简单大家一看应该就明白了,我只解释一下这句吧

var qsData = { 'wd': strdomin, 'p': '3', 'cb': 'ShowDiv', 't': '1324113456725' };

wd是我们要输入的关键字。

p  和就不用管了

cb是什么呢?是Ajax返回是直接调用的方法,个是百度返回的数据里面会执行方法进行调用,我们不用做任何的处理

只需要写一个方法接受数据就行了

function ShowDiv(strurls) {var urls = strurls["s"];}

urls 这个就是我们需要的数据,我们一起来看看调用后返回的数据是什么样式的吧

ShowDiv({q:"博客",p:false,s:["博客中国","博客园","博客大巴","博客网","博客登陆","博客注册","博客搜索","博客群发","博客 新浪","博客群发大师"]});

这就是百度返回的数据,我们只需要s后面的数据就行了,现在应该明白我写var urls = strurls["s"]; 这句的意思了吧。

在个时候大家可以自己试试了。

因为百度只返回的数据,所以我们还要做一个智能提供的框,当然也就可以自己定义样子了。先来看看这个框吧

 <div style="display: none; position: absolute;" id="allSitesBoxHdl" class="classlist"onmouseover="this.style.display='block'" onmouseout="this.style.display='none'"><ul id="allSitesBoxContent"></ul></div>

样式如下

View Code
#allSitesBoxHdl.classlist
{position: absolute;background-color: #F5FBFF;width: 256px;border: 1px solid #C9E4F4;top: 28px;left: 0;text-align: left;font-size: 14px;line-height: 30px;padding: 1px;
}
#allSitesBoxHdl.classlist li
{display: inline;
}
#allSitesBoxHdl.classlist li.lis a
{text-decoration: none;height: 30px;width: 210px;float: left;padding-left: 8px;color: #666;
}
#allSitesBoxHdl.classlist li.lis a:hover
{color: #016493;background-color: #edf6fb;
}
#allSitesBoxHdl.classlist li.lis a:active
{color: #016493;background-color: #edf6fb;
}
#allSitesBoxHdl.classlist li.lis input
{cursor: pointer;color: #FF6600;border-right: 1px solid #ccc;border-bottom: 1px solid #ccc;height: 22px;margin: 4px;line-height: 22px;float: right;background: #fff;
}
.wena
{color: #666;font-size: 12px;height: 30px;line-height: 30px;width: 250px;float: left;
}


第一步我们需要一个注册事件来完成控件的一些效果事件的绑定,当我们输入数据时才能的效果

方法如下

复制代码
//注册对象的事件
function Init() {$("#allSitesBoxHdl")[0].style.display = "none"; $(":text").each(function () {if ($(this)[0].getAttribute('url') == 'true') {//给所有的text加属性$(this).bind("keyup", OnKeyup); //按键时$(this).bind("mousedown", BoxShowUrls); //鼠标安下时$(this).bind("mouseout", BoxHide); //鼠标离开时$(this).bind("paste", OnPaste); //处理http;//$(this)[0].setAttribute("autocomplete", "off");}});
}
复制代码


这个方法这句 if ($(this)[0].getAttribute('url') == 'true') {//给所有的url=true属性的Text加效果

的意思是,我们所有引用这个网页的Text框中,只要有一个属性是url='true'的都会实现这个效果,也就是说我们只要把样式和Js文件引入一下,然后想让那具控件显示就直接添加一个属性

url='true'就行了,别的什么也不需要做了。是不是很方便啊。

一起来看看绑定方法的实现吧

下面是整个Js文件(这里还包括一个同时输入多个文本框的效果)

View Code
复制代码
//-----------------------------------------实现多个输入框同时输入的方法-----------------------------------------------
//得到控件ID
function getid(id) {return (typeof id == 'string') ? document.getElementById(id) : id
};
function getOffsetTop(el, p) {var _t = el.offsetTop;while (el = el.offsetParent) {if (el == p) break;_t += el.offsetTop}return _t
};
function getOffsetLeft(el, p) {var _l = el.offsetLeft;while (el = el.offsetParent) {if (el == p) break;_l += el.offsetLeft}return _l
};var currentInput = null;
//修改属性显示列表
function BoxShow(e) {var input = e;if (!input.id) {input = e.target ? e.target : e.srcElement;}currentInput = input;FillUrls();var box = getid("allSitesBoxHdl");if (box.style.display == 'block' && currentInput.id == input.id) {return;}box.style.left = (getOffsetLeft(input)) + 'px';box.style.top = (getOffsetTop(input) + (input.offsetHeight - 1)) + 'px';box.style.width = (input.offsetWidth - 4) + 'px';box.style.display = 'block';
}
//显示列表
function BoxShowUrls(e) {var input = e;if (!input.id) {input = e.target ? e.target : e.srcElement;}BoxShow(e);
}
//给Input设置值
function InputSetValue(val) {var obj = currentInput;obj.value = val;if (obj.getAttribute('url') == 'true') {var tags = document.getElementsByTagName('input');for (var i = 0; i < tags.length; i++) {if (tags[i].getAttribute('url') == 'true' && tags[i] != obj) {tags[i].value = val;}}}BoxHide();
}function BoxHide() {if (getid("allSitesBoxHdl")) {getid("allSitesBoxHdl").style.display = 'none';}
}
//加载列表
function FillUrls() {var strdomin = $.trim($("#Text1").val());var qsData = { 'wd': strdomin, 'p': '3', 'cb': 'ShowDiv', 't': '1324113456725' };$.ajax({async: false,url: "http://suggestion.baidu.com/su",type: "GET",dataType: 'jsonp',jsonp: 'jsoncallback',data: qsData,timeout: 5000,success: function (json) {},error: function (xhr) {alert(xhr);}});
}
function ShowDiv(strurls) {var urls = strurls["s"];var html = "";if (urls) {var urllist = urls;var forlength = 0;var stringcookie;for (var i = urllist.length - 1; i >= 0; i--) {var textval = urllist[i];if ($.trim(textval) != "" && $.trim(textval) != "undefined") {html += "<li class=\"lis\"><a href=\"javascript:InputSetValue('" + textval + "');\">" + textval + "</a></li><br/>";}}} else {html = "<li style='font-size: 12px;' >&nbsp;&nbsp;没有记录</li>";}if ($.trim(html) == "") {html = "<li style='font-size: 12px;' >&nbsp;&nbsp;没有记录</li>";}getid("allSitesBoxContent").innerHTML = html;
}
//关闭输入法
function closeIME(e) {var obj = e.target ? e.target : e.srcElement;obj.style.imeMode = 'disabled';
}function OnPaste(e) {var obj = e.target ? e.target : e.srcElement;setTimeout("MoveHttp('" + obj.id + "')", 100);
}
//修正URL
function MoveHttp(id) {var val = getid(id).value;val = val.replace("http://", "");if (val[val.length - 1] == '/') {val = val.substring(0, val.length - 1);}getid(id).value = val;
}
function OnKeyup(e) {var obj = e.target ? e.target : e.srcElement;setTimeout("addInput('" + obj.id + "')", 200);
}
//赋值
function addInput(id) {var obj = getid(id);//如果是一个没有True的input不执行
    if (obj.getAttribute('url') == 'true') {if (obj.value.indexOf('。') > 0) {obj.value = obj.value.replace('。', '.');}var tags = document.getElementsByTagName('input');for (var i = 0; i < tags.length; i++) {if (tags[i].getAttribute('url') == 'true' && tags[i] != obj) {tags[i].value = obj.value;}}}FillUrls();
}
//注册对象的事件
function Init() {$("#allSitesBoxHdl")[0].style.display = "none"; $(":text").each(function () {if ($(this)[0].getAttribute('url') == 'true') {//给所有的url=true属性的Text加效果
            $(this).bind("keyup", OnKeyup); //按键时
            $(this).bind("mousedown", BoxShowUrls); //鼠标安下时
            $(this).bind("mouseout", BoxHide); //鼠标离开时
            $(this).bind("paste", OnPaste); //处理http;//
            $(this)[0].setAttribute("autocomplete", "off");}});
}
复制代码


网页代码如下:

View Code
复制代码
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title></title><link href="Scripts/StyleSheet.css" rel="stylesheet" type="text/css" /><script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script><script src="Scripts/JScript2.js" type="text/javascript"></script>
</head>
<body><form style="text-align: center" id="form1" runat="server"><br />  <br />  <br />  <br />  <br />  <br />  <br /><input style="width:500px;"  url="true" id="Text1" type="text" /><br/><input style="width:500px;" id="Text2" type="text" /><div style="display: none; position: absolute;" id="allSitesBoxHdl" class="classlist"onmouseover="this.style.display='block'" onmouseout="this.style.display='none'"><ul id="allSitesBoxContent"></ul></div><script type="text/javascript">        Init();</script></form>
</body>
</html>
复制代码


好了我们一起浏览一下效果吧

是不是很拉风啊。

说到这里不仅仅是百度这样,像Soso,Sogou等都可以使用同样的方法来实现。

大家如有兴趣的话可以下载这个例子看看。下载地址:http://download.csdn.net/detail/sufei1013/3949230

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_825045.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#多线程|匿名委托传参数|测试您的网站能承受的压力|附源代码--升级版

源代码下载&#xff1a;http://files.cnblogs.com/sufei/AutoFor2.rar 上次文章链接&#xff1a;http://www.cnblogs.com/sufei/archive/2012/01/12/2320430.html 写这些并不是不会用测试工具&#xff0c;也并不是无视测试工具&#xff0c;而是做为一个程序员希望用自己写…

网站的文章怎么才能让百度等搜索引擎快速收录?

原文地址&#xff1a;https://www.jb51.net/yunying/487673.html 网站的文章怎么才能让百度等搜索引擎快速收录&#xff1f;网站中的文章收录很慢&#xff0c;怎么才能让网站的文章被百度快速收录呢&#xff1f;下面我们就来看看详细的教程&#xff0c;需要的朋友可以参考下 网…

百度网站收录教程(个人版)

让百度搜索到有两种方法&#xff0c;一种是等百度主动来爬取你的网站&#xff0c;还有一种是你自己主动提交给百度告诉它来爬取。第一种周期太过漫长&#xff0c;所以本文就讲第二种 1.准备网站 首先&#xff0c;想要做SEO的同学&#xff0c;需要考虑清楚所选择的前端框架。现…

一招技巧解决360搜索结果页展示网站LOGO

原文地址&#xff1a;https://www.shenduwang.com/article/yzjqjjssjgyzswzlogo_1.html 导读&#xff1a;当你在搜索引擎中搜索一个关键词的时候&#xff0c;搜索结果页会以不同的方式呈现&#xff0c;有的展示LOGO&#xff0c;有的展示一张图片&#xff0c;有的只显示标题与描…

防护升级 让你的网站拥有HTTPS加密传输

在网络安全日益恶化的今天&#xff0c;各大网站都开始注意到HTTPS&#xff08;超文本加密传输协议&#xff09;在安全防护上的技术优势&#xff0c;可是由于各种因素的影响&#xff0c;HTTPS协议的普及仍面临着相当大的挑战。例如&#xff0c;要将一家网站的服务器主机进行HTTP…

IIS服务器asp.net 网站文件夹权限设置

2019独角兽企业重金招聘Python工程师标准>>> 在IIS中选择网站&#xff0c;点击“编辑权限...”&#xff0c;在文件夹属性窗口中&#xff0c;选择”安全”&#xff0c;然后点击“编辑...”按钮&#xff0c;添加用户“IIS APPPOLL\应用程序池名称”&#xff0c;修改权…

地下数据交易网站被黑 疑似Target报复

日前&#xff0c;在黑市论坛上&#xff0c;黑客大肆出售从Target及其他公司盗走的信用卡数据。 有两个网站专门出售被盗的信用卡和借记卡信息——其中就有Target公司被盗的部分信息&#xff0c;然而这两个网站在遭到匿名黑客的攻击后曾一度处于关闭状态。 “Hi subhumans and m…

如何把其他网站的搜索页挂到自己的网站上_seo网站排名优化工具推荐

推荐seoj67745网站排名优化工具&#xff0c;企业经常采用SEO优化&#xff0c;以获得更好的排名和更好的流量自己的网站。搜索引擎优化有哪些方法&#xff1f;或者什么更有效&#xff1f;因此&#xff0c;虽然区域关键字优化的转化率很高&#xff0c;但是区域关键字优化对于用户…

一次网站性能排查实录

接到一个求助电话&#xff0c;说是有个阿里云上的服务器&#xff0c;有性能瓶颈&#xff0c;但又没有什么具体的数据&#xff0c;只是说偶尔客户端有少数连接不上&#xff0c;或者连接会突然中断。我的天&#xff0c;最怕这种状况了&#xff0c;还得自己去找问题表现是什么&…

Visual Studio 2012网站如何只生成一个DLL文件

简介&#xff1a; 在Visual Studio 2005,2008,2010版本中&#xff0c;都有Web Deployment工具将网站进行发布&#xff0c;所有代码文件和库文件发布&#xff0c;生成为一个动态链接库文件&#xff0c;而在Visual Studio 2012中却不再提供此工具。 而这一功能实际上已经内置在Vi…

第一阶段:前端开发_HTML——网站后台显示页面

2018-03-30 HTML 一、HTML介绍 1&#xff09;超文本标记语言&#xff1a; 超文本&#xff1a;页面内可以包含图片、链接&#xff0c;甚至音乐、程序等非文字元素&#xff0c;比普通文本更强大。 标记语言&#xff1a;使用一组标签对内容进行描述的一门语言&#xff0c;它不是编…

手把手教你从零基础开始搭建个人网站

曾有不少人问过我怎么搭建自己的博客。其实搭建个人博客的方式有很多&#xff0c;有使用Git Page的&#xff0c;有使用一些博客平台的&#xff0c;也有自己购买网站空间或服务器搭建的&#xff0c;更有大神索性自己开发一套博客程序来用的。本文所介绍的方法全部基于Linux系统服…

传统网站维护难,智能化建站平台帮助国际学校一站解决...

公司名称&#xff1a;句容碧桂园学校客户公司行业&#xff1a; 教育学校网站网址&#xff1a;http://www.jrbgy.net/建站产品&#xff1a;云企业官网--阿里云市场自营建站产品 句容碧桂园学校是碧桂园教育集团旗下连锁学校&#xff0c;从幼儿园至大学预科15年一贯的全日制寄宿制…

阿里云个人网站LAMP

阿里云建站-官方教程 例如你的 root用户现在没有密码&#xff0c;你希望的密码修改为abc&#xff0c;那么命令是&#xff1a;mysqladmin -u root password abc 解决Apache无法解析PHP问题 如果没有mbstring模块需要手动安装↓&#xff0c;修改php.ini&#xff08;extension_d…

网站服务器购买配置选购方案

云服务器 的配置选择&#xff0c;和网站或应用的类型、访问量、数据量大小、程序质量等因素有关&#xff0c;建议和您的网站或应用的开发技术人员沟通&#xff0c;选择最适合您的配置。 如果您没有技术人员可提供建议&#xff0c;可以参考我们的建议进行配置选择。网站初始阶段…

一个对开发者可能会越来越有用的网站

i18n啥是 i18n&#xff1f;这应该又是一个程序员的智慧。我们经常在某些软件里面会看到 i18n 目录&#xff0c;它代表的就是应用程序本地化代码的目录。那为什么有个这么奇怪的名字呢&#xff1f;因为 Internationalization 作为目录名字来说&#xff0c;实在是太长了啊啊啊啊啊…

【大数据之网站用户行为分析】

网站数据分析历史&#xff0c;从“您是第***位来访用户”到现在百家齐放的专业工具提供商&#xff0c;网站分析已经逐渐发展衍化成一门科学。但面对形态各异的分析数据&#xff0c;很多人仍然困惑于数据的来源&#xff0c;了解数据的收集原理&#xff0c;也许对你解决这些困惑有…

几个游戏门户网站的对比,挺说明问题哦。

几个游戏门户网站的对比&#xff0c;挺说明问题哦。

拒绝 IE 的网站

如果你用 IE 访问 http://www.openaddict.com/ &#xff0c;你将被拒绝&#xff1a;If youre reading this it means youre using Microsofts Internet Explorer to attempt to view Open Addict.com. Youre being blocked because Internet Explorer doesnt adhere to web sta…