GeckoFx v45浏览器控件实现文件下载出现异常的解决办法
生活随笔
收集整理的這篇文章主要介紹了
GeckoFx v45浏览器控件实现文件下载出现异常的解决办法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
最近用到了GeckoFx的下載功能, 從網(wǎng)絡(luò)上找到了一些代碼復(fù)制運行, 發(fā)現(xiàn)有時候會報COM調(diào)用錯誤的異常, 經(jīng)查找發(fā)現(xiàn)是GeckoFx的接口發(fā)生更新了, 之前的接口已經(jīng)棄用, 下面貼上經(jīng)測試可用代碼:
首先先 注冊下載事件:
Gecko.LauncherDialog.Download += this.LauncherDialog_Download;然后實現(xiàn)下載事件方法:
private void LauncherDialog_Download(Object sender, Gecko.LauncherDialogEvent e) {uint flags = (uint)nsIWebBrowserPersistConsts.PERSIST_FLAGS_NO_CONVERSION |(uint)nsIWebBrowserPersistConsts.PERSIST_FLAGS_REPLACE_EXISTING_FILES |(uint)nsIWebBrowserPersistConsts.PERSIST_FLAGS_BYPASS_CACHE;SaveFileDialog dlg = new SaveFileDialog{FileName = e.Filename};if (dlg.ShowDialog(this.ParentForm) == DialogResult.OK){nsIURI source = IOService.CreateNsIUri(e.Url);nsIURI dest = IOService.CreateNsIUri(new Uri(dlg.FileName).AbsoluteUri);nsAStringBase t = new nsAString(Path.GetFileName(dlg.FileName));nsIWebBrowserPersist persist = Xpcom.CreateInstance<nsIWebBrowserPersist>("@mozilla.org/embedding/browser/nsWebBrowserPersist;1");nsITransfer nst = Xpcom.CreateInstance<nsITransfer>("@mozilla.org/transfer;1");nst.Init(source, dest, t, e.Mime, 0, null, persist, false);if (nst != null){persist.SetPersistFlagsAttribute(flags);persist.SetProgressListenerAttribute(nst);try{persist.SaveURI(source, null, null, (uint)Gecko.nsIHttpChannelConsts.REFERRER_POLICY_NO_REFERRER, null, null, (nsISupports)dest, null);GuiHelper.MsgBox($"文件[{Path.GetFileName(dlg.FileName)}]已下載成功!");}catch (Exception ex){GuiHelper.MsgBox($"下載失敗: {ex.Message}.");}return;}GuiHelper.MsgBox("下載失敗: 服務(wù)器無響應(yīng)...");} }與老版本代碼的區(qū)別是多了下面兩行代碼:
nsITransfer nst = Xpcom.CreateInstance<nsITransfer>("@mozilla.org/transfer;1"); nst.Init(source, dest, t, e.Mime, 0, null, persist, false);如果沒有這兩行代碼就會有很大幾率出現(xiàn)異常...
總結(jié)
以上是生活随笔為你收集整理的GeckoFx v45浏览器控件实现文件下载出现异常的解决办法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 白话文解析LiteFlow的理念是什么?
- 下一篇: 你不知道的vue3:使用runWithC