C# 在awesomium中创建JavaScript全局对象

C# 在awesomium中创建JavaScript全局对象,c#,awesomium,C#,Awesomium,我想在聊天时问一下,但没有回答。 所以让我们尝试以下代码: JSObject jso1 = webView.CreateGlobalJavascriptObject("Super1"); JSObject jso2 = webView.CreateGlobalJavascriptObject("Super2"); webView.ExecuteJavascript("Super2 = function() { return 555; }"); JSValue val = webView.Exec

我想在聊天时问一下,但没有回答。 所以让我们尝试以下代码:

JSObject jso1 = webView.CreateGlobalJavascriptObject("Super1");
JSObject jso2 = webView.CreateGlobalJavascriptObject("Super2");
webView.ExecuteJavascript("Super2 = function() { return 555; }");
JSValue val = webView.ExecuteJavascriptWithResult("Super2();");
如果我们使用Debugger跟踪它,我们可以看到jso2尚未创建,但jso1将创建。 因此,val 2从未设置为555

让我们试试这个:

webView.CreateGlobalJavascriptObject("Super1");
JSObject jso2 = webView.CreateGlobalJavascriptObject("Super2");
webView.ExecuteJavascript("Super2 = function() { return 555; }");
JSValue val = webView.ExecuteJavascriptWithResult("Super2();");
将创建Super2,但不会将其分配给函数。val将是未定义的(不是555)

反对:

webView.CreateGlobalJavascriptObject("Super1");
webView.CreateGlobalJavascriptObject("Super2");
webView.ExecuteJavascript("Super2 = function() { return 555; }");
JSValue val = webView.ExecuteJavascriptWithResult("Super2();");
很好用!此代码创建两个对象并将Super2指定为函数。val在代码执行后设置555

所以。问题是谁错了?可能是我,因为我可能不理解液氧发动机的原理。还是一只虫子


问候

不接近VS,但我认为问题在于您没有使用定义的JS对象,您应该在jso2对象上使用bind方法,而不是调用它。第三个示例起作用的原因是,您不跟踪全局对象,从而使它们可用于GC,并且您定义的Super2方法是V8窗口范围上的函数,而不是您定义的对象上的函数。你可以用调试程序来测试它,但是这里没有VS,所以我可能要离开了。但是我没有时间学习awesomium。我选择了GeckoFX——它更“胖”但“透明”,并且有我已经使用过的相同方法(相同的WebBrowser女士)。。但我想试试用C++嵌入铬。我想会更快。