2011-12-29 2 views
1

다양한 웹 사이트에 the Freebase suggestion search widget을 포함 시키려면 (Scriptish) 사용자 스크립트를 작성하고 싶습니다. 이 방법을 사용하기 위해 여러 가지 방법을 시도했지만 지금까지는 아무런 운이 없었습니다.userscript에서 Freebase의 제안 스크립트를 사용하는 방법은 무엇입니까?

// ==UserScript== 
// @id    [email protected] 
// @name   Meta 
// @version  1.0 
// @namespace  
// @author   
// @description  
// @include  * 
// @run-at   document-end 
// @require  https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.js 
// @require  http://freebaselibs.com/static/suggest/1.3/suggest.min.js 
// @noframes 
// ==/UserScript== 

$("head").append('<link type="text/css" rel="stylesheet" href="http://freebaselibs.com/static/suggest/1.3/suggest.min.css" />'); 
$("body").prepend('<input id="freebase-suggest" type="text"/>'); 

$("#freebase-suggest") 
    .suggest() 
    .bind("fb-select", function(e, data) { 
     alert(""); 
    }); 

모든로드 잘하지만, 검색 상자를 사용하려고 할 때 작동하지 않고 다음 오류가 오류가 표시됩니다

내 userscript는 (와일드 카드 포함 주목을)처럼 보인다 콘솔 :

Error: jQuery16101843227533633628_1325186688691 is not defined Source File: http://www.freebase.com/private/suggest?callback=jQuery16101843227533633628_1325186688691&prefix=ron+paul&type_strict=any&all_types=false Line: 1

분명히 스크립트가 크로스 도메인 요청 JSONP를 사용하고 내 직감이 나에게 jQuery16101843227533633628_1325186688691 위젯은 안전하지 않은 대합니다 (Scriptish 컨텍스트에있는 문서에서 다른 컨텍스트에서 정의되고있는 콜백을 말하고있다 창문).

어떻게해야합니까?

답변

0

jQuery와 Freebase 제안 스크립트를 DOM에 추가하고로드가 완료 될 때까지 기다리는 것으로 충분합니다. 하지만 unsafeWindow을 참조해야합니다.

var head = document.getElementsByTagName('head')[0]; 

// Only add jQuery if the site doesn't have it already (to prevent conflicts) 
if (typeof unsafeWindow.jQuery === "undefined") { 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js'; 
    head.appendChild(script); 
} 

var script = document.createElement('script'); 
script.type = 'text/javascript'; 
script.src = 'http://freebaselibs.com/static/suggest/1.3/suggest.min.js'; 
head.appendChild(script); 

window.setTimeout(function() { 
    $ = unsafeWindow.jQuery; 

    $("head").append('<link type="text/css" rel="stylesheet" href="http://freebaselibs.com/static/suggest/1.3/suggest.min.css" />'); 
    $("body").prepend('<input id="freebase-suggest" type="text"/>'); 

    $("#freebase-suggest") 
     .suggest() 
     .bind("fb-select", function(e, data) { 
      alert(""); 
     }); 

}, 1000); 

이 방법이 현명한 방법인지는 모르겠지만 작동하지 않습니다.

관련 문제