我正在尝试编写一个简单的Ubiquity命令,该命令将对Wolfram Alpha运行查询,并将结果显示在Ubiquity预览对象中。

我需要设置预览对象的innerHTML。我目前正在这样做以获得HTML,这只是一个开始:

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


我有2个问题/问题:


Wolfram需要5到10秒的时间来生成页面上的所有HTML,因此get()命令返回不完整的HTML如何等待页面完全加载?
结果在Wolfram页面上显示为id="results",我只想通过以下操作获得结果:previewBlock.innerHTML = page.getElementById('results').innerHTML如何使用我使用的URL来完成?


另一个选择可能是使用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;
      }
    );
  }
})

最佳答案

我认为使用Ubiquity Preview甚至不可能做到这一点。问题在于,将请求发送到Wolfram时,页面很快完成加载,但是您仍然知道,页面继续异步获取其他信息。

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

这是运行命令并传递文本“ USA GDP”的屏幕截图。页面加载完成后,将有两个div获取显示信息,另外两个将开始异步获取其他数据。
alt text http://exterbase.com/wolfram-result.png

10-06 15:27