我创建了一个新的WPF项目,并为其添加了一个Awesomium 1.6.3 WebControl.
然后,我将此代码添加到MainWindow.xaml.cs:
private void webControl1_Loaded(object sender, RoutedEventArgs e)
{
webControl1.LoadURL("https://www.google.com/");
}
private void webControl1_DomReady(object sender, EventArgs e)
{
var wc = new WebClient();
webControl1.ExecuteJavascript(jQuery);
webControl1.ExecuteJavascript(@"var __jq = jQuery.noConflict();");
webControl1.ExecuteJavascript(@"alert(__jq);");
using(var result = webControl1.ExecuteJavascriptWithResult(@"(function() { return 1; })();"))
{
MessageBox.Show(result.ToString());
}
//using (var result = webControl1.ExecuteJavascriptWithResult(@"(function() { return __jq('a'); })();"))
//{
// MessageBox.Show(result.ToString());
//}
}
Run Code Online (Sandbox Code Playgroud)
并且它警告"1"然后"功能(a,b){...}",这是乱序的,现在我想到它,但无论如何,这是另一个问题.
一旦我取消注释底部代码,它就会发出"1"警告然后挂起.为什么?我怎样才能获得有关页面链接的一些信息?或者可靠地将一些信息传递回C#?或者使用C#访问DOM?
编辑: jQuery只是一个包含jQuery 1.7代码的字符串.
我想在我的WPF应用程序中使用Awesomium作为嵌入式Web浏览器.
我已经尝试安装最新的Awesomium SDK(1.6.3b)和两个版本(1.6.2和1.6.1).在我的Windows 7 64位机器上都出现了一个令人讨厌的错误,如下所示:
[SEH_GENERIC] ARRAY_BOUNDS_EXCEEDED (0xc000008c) at address [0x757ab9bc]
*** Stack Trace (x86) ***
[0x757ab9bc] RaiseException()
[0x00b1983e] -----
[0x00b1435a] -----
[0x00b134cc] -----
[0x00af5650] -----
[0x77a60a52] RtlCreateHeap()
[0x77a5b375] RtlFormatCurrentUserKeyPath()
[0x77a53c74] RtlImageNtHeader()
[0x49564441] -----
[0x5354534e] -----
Run Code Online (Sandbox Code Playgroud)
对公司和创始人(Adam Simmons)重复发送的关于网站许可和安装问题的电子邮件和网络查询都没有得到答复.
我的问题是:
如何在Awesomium中处理window.print()事件到实际打印(不打印到PDF)?我知道它会使用WebView.PrintRequest事件,但我不知道该怎么做
http://docs.awesomium.net/1_7_0/html/E_Awesomium_Core_WebView_PrintRequest.htm
有没有办法下载Awesomium最新sdk或视觉工作室2015,因为他们的网站已关闭?我需要它为我发现的Visual Basic项目,其中需要Awesomium核心和一些功能..
我在C#中的表单上使用Awesomium WebControl,我正在尝试将信息传递到USB设备已插入的浏览器中,我的USB检测工作正常但由于某种原因,我不能JSObject()使用每个值构建一个值设备插入其中.
以下是将设备插入计算机时触发的代码
JSObject js_obj;
DriveInfo[] allDrives = DriveInfo.GetDrives();
JSValue[] js_arr = new JSValue[allDrives.Count()];
int count = 0;
foreach (DriveInfo drive in allDrives)
{
if (drive.IsReady == true)
{
if (drive.DriveType == DriveType.Removable)
{
js_obj = new JSObject();
js_obj["Id"] = new JSValue("");
js_obj["TimeAdded"] = new JSValue("");
js_obj["DriveLetters"] = new JSValue(drive.VolumeLabel);
js_obj["Port"] = new JSValue("");
js_arr[count] = new JSValue(js_obj);
count++;
}
}
}
this.Browser.CallJavascriptFunction("DiskDetector", "DeviceAdded", js_arr);
Run Code Online (Sandbox Code Playgroud)
但是当我在this.Browser.CallJavascriptFunction("DiskDetector", "DeviceAdded", js_arr);js_arr中添加一个断点时,是一个4的数组,其中所有值都为null
我认为问题是我使用JSObject和设置值JSObject扩展IDisposable和我虽然我必须所有添加("键","值"); 但是这个方法不适合我使用
我的WebControl在XAML中定义如此
<aw:WebControl Source="http://google.com" Name="wpfWebControl"/>
我找到了这个,并尝试通过处理WebSession和视图来遵循它的指示,就像这样
var webSession = this.wpfWebControl.WebSession;
this.wpfWebControl.Dispose();
webSession.Dispose();
WebCore.Update();
Run Code Online (Sandbox Code Playgroud)
然后尝试用简单的方法删除存储缓存的目录
Directory.Delete(WEBSESSION_CACHE_PATH), true);
这里WEBSESSION_CACHE_PATH是其中的缓存文件存储的目录.
我遇到UnauthorizedAccessException,因此文件仍在使用中.不仅如此,如果我处理我的WebControl,屏幕将变为空白,并恢复它
this.wpfWebControl = new WebControl() 也不行.
我该怎么做?
有没有办法在webControl中加载html作为字符串?
就像是:
webControl.Load("<!DOCTYPE html><html>...");
Run Code Online (Sandbox Code Playgroud)
像在普通的wpf webControl中使用的那样:
webControl.NavigateToString("<!DOCTYPE html><html>...");
Run Code Online (Sandbox Code Playgroud) 我刚开始使用awesomium.我想了解如何更改用户代理和引荐来源.我需要例如初始化5 istance o awesomium webcontrol,并为他们每个我需要不同的用户代理和不同的推荐人.这是我的简单代码
private void newbrowser()
{
browser = new Awesomium.Windows.Forms.WebControl();
browser.Paint += browser_Paint;
browser.Location = new System.Drawing.Point(1, 1);
browser.Name = "webControl";
browser.Size = new System.Drawing.Size(1024, 768);
browser.Source = new System.Uri("https://www.google.com/", System.UriKind.Absolute);
browser.TabIndex = 0;
}
void browser_Paint(object sender, PaintEventArgs e)
{
browser.Paint -= browser_Paint;
System.Collections.Specialized.NameValueCollection myCol =
new System.Collections.Specialized.NameValueCollection();
myCol.Add("Referer", "http://www.yahoo.com");
browser.SetHeaderDefinition("MyHeader", myCol);
browser.AddHeaderRewriteRule("http://*", "MyHeader");
}
private void button1_Click(object sender, EventArgs e)
{
newbrowser();
}
Run Code Online (Sandbox Code Playgroud)
这2行给出错误
browser.SetHeaderDefinition("MyHeader", myCol);
browser.AddHeaderRewriteRule("http://*", "MyHeader");
Run Code Online (Sandbox Code Playgroud)
错误1'Awesomium.Windows.Forms.WebControl'不包含'SetHeaderDefinition'的定义错误1'Awesomium.Windows.Forms.WebControl'不包含'AddHeaderRewriteRule'的定义
谢谢您的帮助
Hy all,
我正在一个类中使用awesomium webcontrol创建一个Winform项目.我正在将该控件导航到http://www.google.com/(仅用于测试)并DocumentReady为其添加了一个偶数列表器.但它不会激发听众......(i don't get the "in the listener!" message)
这是我得到的代码(我称之为doSomeScrap主要形式(Form1):
class scrapper
{
WebControl web = new WebControl();
public void doSomeScrap()
{
MessageBox.Show("in the scrapper...");
web.DocumentReady += webcontrolEventListener;
web.Source = "http://www.google.com".ToUri();
web.Update();
}
private void webcontrolEventListener(object sender, EventArgs e)
{
MessageBox.Show("in the listener!");
}
}
Run Code Online (Sandbox Code Playgroud)
另外,我听说过LoadingFrameCompleted,但是当我使用它时,我收到以下错误:
'Awesomium.Windows.Forms.WebControl' does not contain a definition for 'LoadingFrameCompleted' and no extension method 'LoadingFrameCompleted' accepting a first argument of type 'Awesomium.Windows.Forms.WebControl' …Run Code Online (Sandbox Code Playgroud) public class Program
{
static void Main(string[] args)
{
var session = WebCore.CreateWebSession(new WebPreferences { WebSecurity = false });
var browser = WebCore.CreateWebView(1920, 3000, session, WebViewType.Offscreen);
WebCore.ShuttingDown += WebCoreOnShuttingDown;
browser.ConsoleMessage += BrowserOnConsoleMessage;
browser.LoadingFrameComplete += BrowserOnLoadingFrameComplete;
browser.DocumentReady += BrowserOnDocumentReady;
browser.Source = new Uri("http://www.google.ru/");
var error = browser.GetLastError();
Console.ReadKey();
}
private static void BrowserOnConsoleMessage(object sender, ConsoleMessageEventArgs consoleMessageEventArgs)
{
}
private static void WebCoreOnShuttingDown(object sender, CoreShutdownEventArgs coreShutdownEventArgs)
{
}
private static void BrowserOnDocumentReady(object sender, UrlEventArgs urlEventArgs)
{
}
private static void BrowserOnLoadingFrameComplete(object sender, …Run Code Online (Sandbox Code Playgroud)