2013-02-20 33 views
6

Tôi về cơ bản cần chạy một số mã jQuery sau khi kết quả tìm kiếm được hiển thị trên trang của tôi. Tôi có thể sử dụng mã v1:Chức năng gọi sau khi tải kết quả tìm kiếm tùy chỉnh của google?

<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.V2_DEFAULT}); 
google.setOnLoadCallback(function() { 
var customSearchOptions = {}; 
var orderByOptions = {}; 
orderByOptions['keys'] = [{label: 'Relevance', key: ''},{label: 'Date', key: 'date'}]; 
customSearchOptions['enableOrderBy'] = true; 
customSearchOptions['orderByOptions'] = orderByOptions; var customSearchControl = new google.search.CustomSearchControl(
    'zzzzzzzzzzzz', customSearchOptions); 
customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET); 
var options = new google.search.DrawOptions(); 
options.setAutoComplete(true); 
customSearchControl.setAutoCompletionId('zzzzzz:zzzzzzz+qptype:3'); 
options.enableSearchResultsOnly(); 
customSearchControl.draw('cse', options); 
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]) { 
    customSearchControl.execute(urlParams[queryParamName]); 
} 
    }, true); 
</script> 

Hoặc mã v2:

<!-- Put the following javascript before the closing </head> tag. --> 

<script> 
    (function() { 
var cx = 'xxxxxxxxx'; 
var gcse = document.createElement('script'); gcse.type = 'text/javascript'; gcse.async = true; 
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + 
    '//www.google.com/cse/cse.js?cx=' + cx; 
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(gcse, s); 
    })(); 
</script> 

Tôi đã thử đặt cuộc gọi chức năng của tôi ở những nơi khác nhau trong các mã nhưng vô ích.

Tôi có chức năng cần đặt động chiều cao của vùng chứa mà kết quả tìm kiếm xuất hiện, vì vậy khi tải kết quả, tôi cần phải gọi nó nếu không trang của tôi hiển thị không chính xác.

Đây là liên kết đến tài liệu API v2 của họ: https://developers.google.com/custom-search/docs/element#cse-element và v1: https://developers.google.com/custom-search/docs/js/cselement-reference. Tôi không thể thấy bất kỳ điều gì có thể gọi lại khi hiển thị kết quả tìm kiếm, chỉ khi khởi tạo. Có vẻ điên rồ mặc dù không có hỗ trợ cho một cái gì đó như thế này.

Dưới đây là những gì tôi đã cố gắng với v2:

(function() { 
     var cx = 'xxxxxxxxx'; 
     var gcse = document.createElement('script'); gcse.type = 'text/javascript'; gcse.async = true; 

     gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + 
      '//www.google.com/cse/cse.js?cx=' + cx; 
     gcse.onreadystatechange = gcse.onload = function() { 
      console.log("executed"); 
      SetMainHeight(20); 
     }; 
     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(gcse, s); 

    })(); 

Giao diện điều khiển không bao giờ kết quả đầu ra "hành quyết". Ngoài ra, tôi thấy trong bảng điều khiển của mình, tôi có lỗi sau:

Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL http://www.google.com/cse?q=test&client=google-coop&hl=en&r=s&cx=xxxxx …s1%2Csr1&rurl=http%3A%2F%2Flocalhost%3A58257%2FSearch%3Fq%3Dtest#slave-1-1. Domains, protocols and ports must match.

Không chắc chắn rằng chức năng tìm kiếm vẫn hoạt động tốt. Tôi đang thử nghiệm này trên localhost trên http. Ví dụ:

+0

Bạn có thể thiết lập một chiều cao tối thiểu trên thùng sơn để nếu việc tìm kiếm thất bại ít nhất một số cấu trúc sẽ được đặt ra để giữ bố trí với nhau? – Stuart

+0

Đã có chiều cao tối thiểu. Tôi đang làm một số footer dính và kích thước năng động khác của container khác nhau trên trang của tôi, vì vậy về cơ bản bất cứ lúc nào chiều cao được thay đổi thông qua jQuery, tôi cần phải tính toán lại độ cao nhất định. – SventoryMang

Trả lời

5

Thật không may v2 không có khả năng này, nhưng trong v1 bạn có thể sử dụng:

.setSearchCompleteCallback(object, method)

Bạn có thể tìm kiếm nó trên this page.

0

Ví dụ, hãy thử và đặt trình xử lý tải trọng cho đối tượng gcse (tập lệnh) trước khi chèn nó vào DOM.

gcse.onreadystatechange = gcse.onload = function() { 
    //execute my code 
}; 

về cơ bản bạn kết thúc với:

<!-- Put the following javascript before the closing </head> tag. --> 

<script> 
    (function() { 
var cx = 'xxxxxxxxx'; 
var gcse = document.createElement('script'); gcse.type = 'text/javascript'; gcse.async = true; 
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + 
    '//www.google.com/cse/cse.js?cx=' + cx; 
gcse.onreadystatechange = gcse.onload = function() { 
    //execute your code here 
}; 
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(gcse, s); 
    })(); 
</script> 
+0

Đã thử điều này, không hoạt động. – SventoryMang

+0

Kiểm tra chỉnh sửa mới nhất của tôi –

+0

Không có con xúc xắc nào = (. – SventoryMang

10

giải pháp trước không làm việc cho tôi, nhưng đây là những gì làm việc cho tôi:

<script> 
    (function() { 

    window.__gcse = { 
     callback: myCallback 
    }; 

    function myCallback() { 
     $('input.gsc-input').keyup(function(e) { if(e.keyCode == 13 || e.which == 13) { console.log('enter pressed'); }}); 
     $('input.gsc-search-button').on('click', function(e) { console.log('clicked');}); 
    } 
    var cx = '002806224466286757728:XXXXXXX'; 
    var gcse = document.createElement('script'); 
    gcse.type = 'text/javascript'; 
    gcse.async = false; 
    gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + 
     '//www.google.com/cse/cse.js?cx=' + cx; 
    var s = document.getElementsByTagName('script')[0]; 
    s.parentNode.insertBefore(gcse, s); 
    })(); 
</script> 
<gcse:search></gcse:search> 

Hope this helps

+1

Đây là những gì tài liệu nói về điều khiển tìm kiếm tùy chỉnh v2 và đó là cách duy nhất để làm điều này tôi tin.Bạn phải chờ tập lệnh tìm kiếm tải sau đó thực thi trước DOM chứa những thứ bạn có thể muốn thay đổi. Đây là cách chúng tôi xóa văn bản khỏi nút để kiểu hình nền được ghi đè của chúng tôi hiển thị biểu tượng thay vì văn bản "tìm kiếm": cửa sổ .__ gcse = { gọi lại: function() { $ ('input.gsc-search -button '). val (' '); } }; –

+0

Giải pháp làm việc !!! –

Các vấn đề liên quan