diff --git a/QuickLook.Plugin/QuickLook.Plugin.HtmlViewer/Helper.cs b/QuickLook.Plugin/QuickLook.Plugin.HtmlViewer/Helper.cs index f3acfed..fcf61bb 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.HtmlViewer/Helper.cs +++ b/QuickLook.Plugin/QuickLook.Plugin.HtmlViewer/Helper.cs @@ -1,4 +1,4 @@ -// Copyright © 2017 Paddy Xu +// Copyright © 2017 Paddy Xu // // This file is part of QuickLook program. // @@ -63,5 +63,25 @@ namespace QuickLook.Plugin.HtmlViewer key?.SetValue(appName, value, RegistryValueKind.DWord); } } + + internal static string GetUrlPath(string url) + { + int index = -1; + string[] lines = File.ReadAllLines(url); + foreach (string line in lines) + { + if (line.ToLower().Contains("url=")) + { + index = System.Array.IndexOf(lines, line); + break; + } + } + if (index != -1) + { + var fullLine = lines.GetValue(index); + return fullLine.ToString().Substring(fullLine.ToString().LastIndexOf('=') + 1); + } + return url; + } } } \ No newline at end of file diff --git a/QuickLook.Plugin/QuickLook.Plugin.HtmlViewer/Plugin.cs b/QuickLook.Plugin/QuickLook.Plugin.HtmlViewer/Plugin.cs index 53cbf00..6acc768 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.HtmlViewer/Plugin.cs +++ b/QuickLook.Plugin/QuickLook.Plugin.HtmlViewer/Plugin.cs @@ -26,7 +26,7 @@ namespace QuickLook.Plugin.HtmlViewer { public class Plugin : IViewer { - private static readonly string[] Extensions = { ".mht", ".mhtml", ".htm", ".html", ".svg" }; + private static readonly string[] Extensions = { ".mht", ".mhtml", ".htm", ".html", ".svg", ".url" }; private WebpagePanel _panel; @@ -44,7 +44,7 @@ namespace QuickLook.Plugin.HtmlViewer public void Prepare(string path, ContextObject context) { - context.PreferredSize = new Size(1000, 600); + context.PreferredSize = new Size(1280, 720); } public void View(string path, ContextObject context) @@ -53,6 +53,10 @@ namespace QuickLook.Plugin.HtmlViewer context.ViewerContent = _panel; context.Title = Path.IsPathRooted(path) ? Path.GetFileName(path) : path; + if (path.ToLower().EndsWith(".url")) + { + path = Helper.GetUrlPath(path); + } _panel.LoadFile(path); _panel.Dispatcher.Invoke(() => { context.IsBusy = false; }, DispatcherPriority.Loaded); } diff --git a/QuickLook.Plugin/QuickLook.Plugin.HtmlViewer/WpfBrowserWrapper.cs b/QuickLook.Plugin/QuickLook.Plugin.HtmlViewer/WpfBrowserWrapper.cs index 6f791f8..20dd774 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.HtmlViewer/WpfBrowserWrapper.cs +++ b/QuickLook.Plugin/QuickLook.Plugin.HtmlViewer/WpfBrowserWrapper.cs @@ -115,9 +115,10 @@ namespace QuickLook.Plugin.HtmlViewer private void InnerBrowserNavigating(object sender, NavigatingCancelEventArgs e) { if (_loaded) - if (_innerBrowser.Source.Scheme != e.Uri.Scheme || - _innerBrowser.Source.AbsolutePath != e.Uri.AbsolutePath) // allow in-page navigation - e.Cancel = true; + if (_innerBrowser.Source != null) + if (_innerBrowser.Source.Scheme != e.Uri.Scheme || + _innerBrowser.Source.AbsolutePath != e.Uri.AbsolutePath) // allow in-page navigation + e.Cancel = true; _loaded = true; } @@ -169,7 +170,7 @@ namespace QuickLook.Plugin.HtmlViewer // register script errors handler on DOM - document.window private void RegisterWindowErrorHanlder_() { - object parwin = ((dynamic) _innerBrowser.Document).parentWindow; + object parwin = ((dynamic)_innerBrowser.Document).parentWindow; var cookie = new AxHost.ConnectionPointCookie(parwin, new HtmlWindowEvents2Impl(this), typeof(IIntHTMLWindowEvents2)); // MemoryLEAK? No: cookie has a Finalize() to Disconnect istelf. We'll rely on that. If disconnected too early, @@ -185,14 +186,14 @@ namespace QuickLook.Plugin.HtmlViewer // grab a handle to the underlying ActiveX object IServiceProvider serviceProvider = null; if (_innerBrowser.Document != null) - serviceProvider = (IServiceProvider) _innerBrowser.Document; + serviceProvider = (IServiceProvider)_innerBrowser.Document; if (serviceProvider == null) return; var serviceGuid = SidSWebBrowserApp; var iid = typeof(IWebBrowser2).GUID; var browserInst = - (IWebBrowser2) serviceProvider.QueryService(ref serviceGuid, ref iid); + (IWebBrowser2)serviceProvider.QueryService(ref serviceGuid, ref iid); try {