【发布时间】:2015-11-27 04:31:49
【问题描述】:
你好 Awesomium 浏览器提供 JavaScript 执行与结果方法来返回这样的值:
private const String JS_FAVICON = "(function(){links = document.getElementsByTagName('link'); wHref=window.location.protocol + '//' + window.location.hostname + '/favicon.ico'; for(i=0; i<links.length; i++){s=links[i].rel; if(s.indexOf('icon') != -1){ wHref = links[i].href }; }; return wHref; })();";
string val = webControl.ExecuteJavascriptWithResult(JS_FAVICON);
但是我需要使用 c# 内置浏览器执行此操作,如何操作, 我认为有方法“webBrowser1.Document.InvokeScript”不知道如何使用它..
已编辑... 这是 Awesomium 浏览器返回值的方式:
private void Awesomium_Windows_Forms_WebControl_DocumentReady(object sender, UrlEventArgs e)
{
// DOM is ready. We can start looking for a favicon.
//UpdateFavicon();
}
private void UpdateFavicon()
{
// Execute some simple javascript that will search for a favicon.
string val = webControl.ExecuteJavascriptWithResult(JS_FAVICON);
// Check for any errors.
if (webControl.GetLastError() != Error.None)
return;
// Check if we got a valid response.
if (String.IsNullOrEmpty(val) || !Uri.IsWellFormedUriString(val, UriKind.Absolute))
return;
// We do not need to perform the download of the favicon synchronously.
// May be a full icon set (thus big).
Task.Factory.StartNew<Icon>(GetFavicon, val).ContinueWith(t =>
{
// If the download completed successfully, set the new favicon.
// This post-completion procedure is executed synchronously.
if (t.Exception != null)
return;
if (t.Result != null)
this.Icon = t.Result;
if (this.DockPanel != null)
this.DockPanel.Refresh();
},
TaskScheduler.FromCurrentSynchronizationContext());
}
private static Icon GetFavicon(Object href)
{
using (WebClient client = new WebClient())
{
Byte[] data = client.DownloadData(href.ToString());
if ((data == null) || (data.Length <= 0))
return null;
using (MemoryStream ms = new MemoryStream(data))
{
try
{
return new Icon(ms, 16, 16);
}
catch (ArgumentException)
{
// May not be an icon file.
using (Bitmap b = new Bitmap(ms))
return Icon.FromHandle(b.GetHicon());
}
}
}
}
这就是我使用 WinForm 浏览器的方式:
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
UpdateFavicon();
}
private void UpdateFavicon()
{
var obj = webBrowser1.Document.InvokeScript("_X_");
string val = webBrowser1.DocumentText = "<script> function _X_(){return " + JS_FAVICON + ";} </script>";
}
【问题讨论】:
-
您指的是哪个 C# 浏览器?您使用的是 WinForms 还是 WPF 或其他任何东西?
-
我一直在搜索找不到这个抱歉的答案
-
@JohnSmith 如果您认为这是答案,您能否发布您将如何使用没有名称的匿名 javascript 函数来做到这一点。
-
不可能。您不能调用匿名函数。
标签: javascript c# winforms return-value