Получение некоторого нечетного поведения из пользовательского поиска Google, которое я не могу представить. Возможно, у кого-то есть ключ.Пользовательский поиск Google - ручная загрузка/выполнение из параметров url
Я собираю сайт Magento, который имеет собственную внутреннюю поисковую систему, но ограничен только продуктом. Я хочу также выполнить пользовательские результаты поиска Google на странице результатов поиска. Я полагаю, что я должен быть в состоянии просто выполнить поиск на основе запроса вары в URL (чтобы вернуть все содержимое без продукта), как таковой:
<section style="min-height:600px">
<div style="background-color:#DFDFDF; min-height:800px; width:100%;">
<div id="cse">Loading</div>
</div>
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
$(document).ready(function(){
console.log('search initiated');
var t = window.setTimeout(function(){ customSearch(); }, 5000);
});
function customSearch(){
var q = urlParams()['q'];
if (q != undefined && q != ""){
console.log('q : %s', q); //outputs successfully
google.load('search', '1');
google.setOnLoadCallback(function() {
var customSearchControl = new google.search.CustomSearchControl(MY CUSTOM ID KEY);
var cseDrawOptions = new google.search.DrawOptions();
cseDrawOptions.setAutoComplete(true); //unknown if this is required...
customSearchControl.draw('cse',cseDrawOptions);
customSearchControl.execute(q);
}, true);
}
}
function urlParams(){
var vars = [];
var hash;
var index = window.location.href.indexOf('?');
if(index != -1){
var hashes = window.location.href.slice(index + 1).split('&');
for(var i = 0; i < hashes.length; i++){
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1].replace(/\+/g, " ");
}
}
return vars;
}
//]>
</script>
</section>
Замечу, что я вытащил все другой контент из логики (но его реализация в пурпуре идентична).
Итак, поведение выглядит следующим образом: страница загружается отлично (я задерживаю поиск Google с тайм-аутом для целей тестирования). Предполагая, что в url есть запрос var, консоль отслеживает, как ожидалось. Затем страница просто обрывается, без контента из Google. «Уничтожено» ... означает, что все элементы на странице исчезают или переписываются на новую страницу, загружаемую Google. Как будто элемент управления поиска не создает iframe - его просто заменяет страницу страницей -less html.
Я подготовил ряд статей по этому вопросу и перешел через API - этот код выглядит так, как будто он должен работать. Но ясно, что нет.
Что мне не хватает?
Приветствия -
UPDATE
Продолжение возни с этим было установлено, что по какой-либо причине:
google.load('search', '1');
google.google.setOnLoadCallback(console.log('loaded'))
Была причина замененного выпуска страницы. На странице с ответами содержались ссылки на модуль поиска, который размещается в google. И если я вручную связаны эти файлы (воздерживаясь в google.load
), то я мог бы запустить поиск, как ожидалось:
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script src="http://www.google.com/uds/?file=search&v=1" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
... search logic
Тогда я нашел альтернативный синтаксис на google developers страницу, которая, казалось, работать, как ожидалось:
$(document).ready(function(){
google.load("search", "1", {"callback" : customSearch});
});
function customSearch(){
var q = urlParams()['q'];
if (q != undefined && q != ""){
var cseControl = new google.search.CustomSearchControl('MY CUSTOM KEY');
var cseDrawOptions = new google.search.DrawOptions();
cseDrawOptions.enableSearchResultsOnly()
cseControl.draw('cse', cseDrawOptions);
cseControl.execute(q);
}
}
Работает должным образом. Только реальная проблема на данный момент является хозяином
Unsafe JavaScript attempt to access frame with URL http://mydomain from frame with URL http://www.google/cse?...
что сейчас выкинут.
Я не знаю, как две разные версии синтаксиса загрузки меняют что-то ... но это казалось. В любом случае, я не знаю, как разрешить эти ошибки перекрестных доменов.
Мысли были бы замечательными.
Связанные: http://stackoverflow.com/questions/2298027/pass-variable-to-google-custom-search-engine –