如何从用户脚本中使用Freebase's建议脚本
How to use Freebase's suggestion script from a userscript?
我想写一个(Scriptish) userscript,其中包括在各种网站上的Freebase建议搜索小部件。我尝试了几种方法来让它工作,但到目前为止还没有运气。
我的用户脚本看起来像(注意通配符的包含):
// ==UserScript==
// @id meta@parsed.nl
// @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("");
});
一切加载正常,但当我尝试使用搜索框时,它不起作用,错误控制台中显示以下错误:
错误:jQuery16101843227533633628_1325186688691 is not defined Source文件:http://www.freebase.com/private/suggest?callback=jQuery16101843227533633628_1325186688691&prefix=ron+paul&type_strict=any&all_types=false线:1
显然,脚本使用JSONP跨域请求,我的直觉告诉我回调jQuery16101843227533633628_1325186688691
是在不同的上下文中定义的文档小部件(Scriptish上下文与unsafeWindow)。
我该怎么办?
在DOM中添加jQuery和Freebase建议脚本并等待它们加载足以使此工作。但是你必须参考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);
我不知道这种方法是否明智,但它确实有效。
相关文章:
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 借助asp.net验证或java脚本对多个文本进行验证
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- Java脚本时间添加
- 不显示带有本地json文件数据的谷歌地图脚本
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 从远程脚本获取用户IP
- 如何根据时间运行不同的脚本
- 如何将字符串值从php页面发送到java脚本页面
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- 当脚本由system.js加载时,如何要求('electron')
- HTML标记在脚本标记中工作
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 使用谷歌应用程序脚本从工作表中获取值并将其显示在文本框中
- 显示时间的脚本
- ng应用程序使脚本无限运行
- 如何在运行时在angular 2中加载外部js脚本
- Google Adsense多次加载脚本
- 如何从用户脚本中使用Freebase's建议脚本