我正在尝试编写一个简单的Ubiquity命令,该命令将在Wolfram Alpha上运行查询,并在Ubiquity预览对象中显示结果。
我需要设置预览对象的innerHTML
。我目前正在这样做以获取HTML,这只是一个开始:
//...
jQuery.get( 'http://www.wolframalpha.com/input/?i=' + input.text,
null,
function( page ) {
previewBlock.innerHTML = page;
}
);
我有2个问题/问题:
get()
命令会返回不完整的HTML 如何等待页面完全加载? id="results"
,我想通过这样的方式得到结果:previewBlock.innerHTML = page.getElementById('results').innerHTML
另一种选择可能是使用Wolfram URL作为源创建一个新元素并将其附加到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;
}
);
}
})
答案 0 :(得分:2)
我认为使用 Ubiquity Preview 甚至无法做到这一点。问题是,当向Wolfram发送请求时,页面会很快完成加载,但它会继续以您已知的方式异步获取其他信息。
如果这是通过浏览器窗口而不是Ubiquity预览完成的,您实际上可以将页面加载到隐藏的iframe中并在更新结果div之前检查内容。但是,此选项在当前版本的Ubiquity中不可用。
这是运行命令并传递“USA GDP”文本的屏幕截图。一旦页面加载完毕,两个div获取显示信息,另外两个div开始异步获取其他数据 alt text http://exterbase.com/wolfram-result.png
答案 1 :(得分:1)
我认为您的想法是可行的,但我认为通过对Wolfram | Alpha API的AJAX调用比尝试解析对W-A Web前端的响应更成功。有关WolframAlpha API的文档,请访问:www.wolframalpha.com/WolframAlphaAPI.pdf
我认为改变与API交互的方法可以解决您的问题。如果您想继续追求当前的方法,您可能需要检查内置Wikipedia命令的代码,以查看它们如何解析搜索结果,然后异步检索预览的文章摘要。