我有一个数据URI的字符串。例如
string dataURI = data:text/html,<html><p>This is a test</p></html>
然后我使用
调用Web浏览器System.Diagnostics.Process.Start(dataURI)
但网页浏览器无法打开,我只是收到错误。当我将数据URI粘贴到浏览器地址栏时,它会打开页面。
任何人都可以帮助我并告诉我我做错了什么吗?
谢谢Tony,
答案 0 :(得分:2)
根据article,
ShellExecute解析传递给它的字符串,以便ShellExecute可以提取协议说明符或扩展名。接下来,ShellExecute在注册表中查找,然后使用协议说明符或扩展名来确定要启动的应用程序。如果将http://www.microsoft.com传递给ShellExecute,ShellExecute会将http://子字符串识别为协议。
在您的情况下,没有http
子字符串。因此,您必须显式传递默认浏览器可执行文件作为文件名和数据URI作为参数。我使用了article中的GetBrowserPath
代码。
string dataURI = "data:text/html,<html><p>This is a test</p></html>";
string browser = GetBrowserPath();
if(string.IsNullOrEmpty(browser))
browser = "iexplore.exe";
System.Diagnostics.Process p = new Process();
p.StartInfo.FileName = browser;
p.StartInfo.Arguments = dataURI;
p.Start();
private string GetBrowserPath()
{
string browser = string.Empty;
Microsoft.Win32.RegistryKey key = null;
try
{
// try location of default browser path in XP
key = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(@"HTTP\shell\open\command", false);
// try location of default browser path in Vista
if (key == null)
{
key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http", false); ;
}
if (key != null)
{
//trim off quotes
browser = key.GetValue(null).ToString().ToLower().Replace("\"", "");
if (!browser.EndsWith("exe"))
{
//get rid of everything after the ".exe"
browser = browser.Substring(0, browser.LastIndexOf(".exe") + 4);
}
}
}
finally
{
if (key != null) key.Close();
}
return browser;
}