2009-05-22 67 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命令的代碼,以查看它們如何解析搜索結果,然後異步檢索預覽的文章摘要。