2011-12-29 15 views
1

さまざまなウェブサイトにthe Freebase suggestion search widgetなどを含める(Scriptish)userscriptを書きたいと思います。私はこれを動作させるためにいくつかのアプローチを試みましたが、これまでのところ運がありません。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); 

この方法が賢明だとは分かりませんが、うまくいきます。

関連する問題