2009-05-22 66 views
2

我正在尝试编写一个简单的Ubiquity命令,该命令将在Wolfram Alpha上运行查询,并将结果显示在Ubiquity预览对象中。jQuery + Ubiquity:从URL返回文档对象

我需要设置预览对象的innerHTML。我目前这样做是为了得到HTML,这仅仅是一个开始:

//... 
jQuery.get('http://www.wolframalpha.com/input/?i=' + input.text, 
    null, 
    function(page) { 
     previewBlock.innerHTML = page; 
    } 
); 

我有2个问题/问题:

  1. 沃尔弗拉姆需要5-10秒生成页面上的所有HTML ,所以get()命令返回不完整的HTML
    它如何等待页面完全加载?

  2. 结果的钨页面上有id="results",我想通过做这样的事情,只是得到的结果:
    previewBlock.innerHTML = page.getElementById('results').innerHTML
    怎么可以这样跟我使用的URL做了什么?

另一个选择可能是使用钨URL作为源来创建一个新的元素,并将其追加到previewBlock - 我不知道该怎么做,虽然。任何建议,将不胜感激。

UPDATE
这里是我使用的是无处不在的脚本 - 它会在一个循环的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

首先,你如何越过“受限制的URI被拒绝”错误? – 2009-05-22 18:21:40

回答

2

我不认为这使用无处不在预览甚至有可能。问题在于,当发送请求到Wolfram时,页面会很快加载完成,但它会继续按照您已知的方式异步获取其他信息。

如果这是通过浏览器窗口而不是Ubiquity预览完成的,则实际上可以将页面加载到隐藏的iframe中,并在更新结果div之前检查内容。但是,此选项在当前版本的Ubiquity中不可用。

下面是运行命令并传递文本“USA GDP”的截图。两个div获取显示信息,另外2个页面在页面加载完成后立即异步获取附加数据。
alt text http://exterbase.com/wolfram-result.png

1

我认为你的想法是可行的,但我认为你必须与一个AJAX调用钨更多的成功| Alpha的API比试图解析到W-A Web前端的响应。有关WolframAlpha API的文档,请参阅:www.wolframalpha.com/WolframAlphaAPI.pdf

我认为改变您与API交互的方法应该可以解决您的问题。如果您想继续追求目前的方法,您可能需要检查内置Wikipedia命令的代码,以查看它们如何解析搜索结果,然后异步检索预览的文章摘要。