2013-07-08 67 views
1

我正在webkit gtk視圖中運行html文件。我把這些設置:如何在Webkit GTK View中下載文檔並打開文件?

let new_settings = new WebKit.WebSettings(); 
    new_settings.enable_universal_access_from_file_uris = true; 
    this._web_view.set_settings(new_settings); 

以爲他們會讓我下載我的計算機上的文件(這不正是我想要做的,但我想測試它)。這不起作用:/

負責的HTML如下:

<a href="resume/resume1.doc"><img class="shadow" src="images/design/1.jpg" alt="img01"></a> 

我試圖做的是自由報辦公室內自動打開resume1.doc當用戶點擊了圖片。我不太清楚如何用GTK/HTML做到這一點

謝謝! :)

回答

1

不清楚頁面是從服務器提供還是在本地加載。

我沒有這樣做過本地文件,但對於由服務器提供服務的頁面,您將監視MIME類型決定並向webkit表明它需要下載它無法處理的MIME類型的MIME類型(或者甚至是MIME類型它可以處理的類型,如果你想下載一個網頁)。在這條線上,您將提供一個文件名並監視進度。下載完成後,Webkit會通知您。信號,將允許你這樣做是

  • 的mime-type-政策決策要求
  • 下載請求
  • 通知::狀態

對於本地文件,我不不知道上述方法是否可行。如果沒有,因爲你正在控制頁面,你可以有鏈接屬性,可以告訴你,該文件需要打開,而不是導航。

一旦你有兩種方法的文件路徑,你可以使用xdg-open命令或者它的等效功能在可以處理文件的應用程序中打開文件。

0

你有正確的開始。您只需要處理MIME類型,然後決定如何打開Libre Office。下面是本地文件的示例(uri是要在本地打開的服務器上特定文檔的路徑):

this._web_view.connect('mime-type-policy-decision-requested', 
     (function (webview, frame, request, mimetype, decision) { 
      if (mimetype === 'application/msword' || 
       mimetype === 'application/vnd.oasis.opendocument.spreadsheet') { 
       // Spawn a libreoffice process with this uri. Necessary because 
       // we want to open the files as templates - the `-n` option 
       // requires the user to save-as. 
       GLib.spawn_async(null, /* cwd */ 
           ['libreoffice', '-n', request.get_uri()], 
           null, /* inherit environment */ 
           GLib.SpawnFlags.DO_NOT_REAP_CHILD | GLib.SpawnFlags.SEARCH_PATH, 
           null /* setup function */); 
       decision.ignore(); 
       return true; 

      } else if (mimetype === 'application/pdf') { 
       // if PDF, use the build in viewer (usually evince) 
       Gtk.show_uri(null, request.get_uri(), 0); 
       decision.ignore(); 
       return true; 
      } 
      // default handler 
      return false; 
    }).bind(this)); 
相關問題