我正在尝试编写一个简单的泛性命令,它将在沃尔夫拉姆阿尔法上运行一个查询,并将结果显示在Ubiquity预览对象中。
我需要设置预览对象的innerHTML。我目前这样做是为了获得HTML,这只是一个开始:
//...
jQuery.get( 'http://www.wolframalpha.com/input/?i=' + input.text,
null,
function( page ) {
previewBlock.innerHTML = page;
}
);我有两个问题:
get()命令返回不完整的HTML。
如何能够等待页面完全加载?id="results",我只想通过这样的操作获得结果:
previewBlock.innerHTML = page.getElementById('results').innerHTML
如何使用我正在使用的URL来完成此操作?另一种选择可能是使用Wolfram作为源创建一个新元素,并将其附加到previewBlock中--我不知道如何做到这一点。如有任何建议,将不胜感激。
更新
下面是我正在使用的Ubiquity脚本--它将从源HTML中获取图像并在一个循环中输出它们。注意:CmdUtils.previewGet(pblock, opt)调用jQuery.get(opt)
CmdUtils.CreateCommand({
name: "wolfram",
takes: {"input": noun_arb_text},
icon: "http://www.wolframalpha.com/favicon.ico",
homepage: "http://www.wolframalpha.com",
author: {name:"Jason Coon"},
description: "Searches Wolfram Alpha and loads results in to Preview pane.",
preview: function(pblock, input) {
CmdUtils.previewGet(pblock,
'http://www.wolframalpha.com/input/?i=' + input.text,
null,
function(data){
var resultStart = data.indexOf("results",0);
var beginPos = data.indexOf("<img src", resultStart);
var endPos = 0;
var html = ""
while(beginPos != -1){
endPos = data.indexOf(">", beginPos);
html = html + "<br><br>" + data.substring(beginPos, endPos);
beginPos = data.indexOf("<img src", endPos);
}
pblock.innerHTML = html;
}
);
}
})发布于 2009-05-22 22:39:07
我认为使用普及预览版是不可能的。问题是,当将请求发送到Wolfram时,页面完成加载非常快,但是它继续异步地获取其他信息,正如您已经知道的那样。
如果这是通过浏览器窗口完成的,而不是通过无处不在的预览,那么您实际上可以将页面加载到隐藏的iframe中,并在更新结果div之前检查内容。然而,此选项在当前版本的普遍性中是不可用的。
这里是一个屏幕截图运行您的命令和传递文本“美国国内生产总值”。两个div获得显示信息,两个div在页面加载完成后就开始异步获取附加数据。
alt文本http://exterbase.com/wolfram-result.png
发布于 2009-05-25 14:01:21
我认为您的想法是可行的,但我认为您在对Wolfram\Alpha API进行AJAX调用时会获得更大的成功,而不是试图解析对W-A web前端的响应。有关WolframAlpha API的文档,请参见: www.wolframalpha.com/WolframAlphaAPI.pdf
我认为改变您的方法与API交互应该可以解决您的问题。如果您想继续使用当前的方法,您可能需要检查内置Wikipedia命令的代码,以了解它们如何解析搜索结果,然后异步检索预览的文章摘要。
https://stackoverflow.com/questions/898203
复制相似问题