自定义谷歌自定义搜索jsapi(查询字符串)
Customizing Google custom search jsapi (query strings)
Helo,
我正在创建谷歌cse功能进行搜索。使用此代码脚本不会设置查询字符串。它不断刷新页面。也许有人知道你做得不对?我只需要为每个搜索不同的页面,例如:http://page.com/search?q=first+搜索我可以用parseParamsFromUrl函数来做吗?
<div id="cse" style="width: 100%;">Loading</div>
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript">
google.load('search', '1', {language : 'en', style : google.loader.themes.MINIMALIST});
google.setOnLoadCallback(function(){
var cse = new google.search.CustomSearchControl('13707349811359660237:cl5vrpn6mu8');
cse.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET);
cse.draw('cse');
cse.setNoResultsString('No results for this query, try a different search.');
cse.setSearchStartingCallback({}, function() {
var q = cse.getInputQuery();
window.location.search = '?q='+q;
});
Function parseParamsFromUrl() {
var params = {};
var parts = window.location.search.substr(1).split(''x26');
for (var i = 0; i < parts.length; i++) {
var keyValuePair = parts[i].split('=');
var key = decodeURIComponent(keyValuePair[0]);
params[key] = keyValuePair[1] ?
decodeURIComponent(keyValuePair[1].replace(/'+/g, ' ')) :
keyValuePair[1];
}
return params;
}
var urlParams = parseParamsFromUrl();
var queryParamName = "q";
if (urlParams[queryParamName]) {
cse.execute(urlParams[queryParamName]);
}
}, true);
</script>
任何帮助都将通知
我自己回答了我的问题。这是的工作脚本
google.load('search', '1', {language : 'lt style: google.loader.themes.MINIMALIST '});
google.setOnLoadCallback(function() {
var customSearchControl = new google.search.CustomSearchControl('014092587915392242087:l98hzi05fja'); // change this to your unique ID
customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET);
customSearchControl.setLinkTarget(google.search.Search.LINK_TARGET_NEW); // open results in new window
var options = new google.search.DrawOptions();
options.setAutoComplete(true);
customSearchControl.draw('cse'); // set the results div id
customSearchControl.execute("<?php if (isset($_GET['q'])) echo filter_var($_GET['q'], FILTER_SANITIZE_STRING); ?>"); // run the search using the value of $_GET['q']
customSearchControl.setSearchStartingCallback({}, function() {
var q = customSearchControl.getInputQuery();
window.location.search = '?q='+q;
});
}, true);
现在每个搜索都出现在url 中
当您在问题中尝试时,您实际上可以在JavaScript中实现这一点,并通过使用HTML5历史API而不是刷新页面来进一步改进它。我就是这样做的:
首先,我们需要jQuery插件来获取params(如果你有PHP,这不是必要的,只是为了参考):
(function($) {
$.QueryString = (function(a) {
if (a == "") return {};
var b = {};
for (var i = 0; i < a.length; ++i)
{
var p=a[i].split('=');
if (p.length != 2) continue;
b[p[0]] = decodeURIComponent(p[1].replace(/'+/g, " "));
}
return b;
})(window.location.search.substr(1).split('&'))
})(jQuery);
接下来是一个在不刷新的情况下更改地址的功能,为不支持历史API的旧浏览器提供回退:
function pushState(path) {
if (typeof(window.history.pushState) == 'function') {
window.history.pushState(null, path, path);
} else {
window.location.hash = '#!' + path;
}
}
最后是Google CSE的代码,假设您的搜索页面位于/search
google.load('search', '1', {language : 'en', style : google.loader.themes.MINIMALIST});
google.setOnLoadCallback(function() {
var searchControl = new google.search.CustomSearchControl('YOUR_SEARCH_ID');
searchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET );
searchControl.draw('cse');
searchControl.execute($.QueryString["q"]);
searchControl.setSearchStartingCallback({}, function() {
var q = searchControl.getInputQuery();
pushState("/search?q=" + q);
})
}, true);
相关文章:
- 类别自动完成jQuery中的单词级自定义筛选器,而不是子字符串
- 是否可以使用Angular2将自定义字符串轻松绑定到html元素中的id和for
- JavaScript Regex-替换字符串中的自定义标记
- 从字符串中检索自定义参数的值
- 通过自定义字母javascript对字符串进行排序
- 如何使用Angular 1.5组件将属性求值为字符串,这是一个自定义函数
- 自定义查询字符串分析器返回不正确的结果
- 表单提交的自定义过帐字符串
- 为什么servlet不't发送json自定义字符串或Ajax don'我没有收到
- 自定义字符串中的键入光标
- 可以将其用作json对象吗?自定义字符串到json解析器
- 如何创建一个JavaScript构造函数,将自定义字符串返回给Object.prototype.toString()
- 自定义字符串-缺失:在属性列表之后
- 在PHP中使用header返回一个自定义字符串到前端
- d3.Js -如何设置自定义("字符串")值' y轴' -刻度
- 谷歌地图Api运行getPlaces与自定义字符串
- 如何使用正则表达式或函数将数字格式化为自定义字符串
- 如何在angular应用的url中添加自定义字符串而不影响其正常功能
- Jquery自定义字符串比较函数输出百分比
- 用javascript解析自定义字符串到变量