我之前发布过有关我的自定义可视化功能无法在Spotfire中使用的帖子: https://stackoverflow.com/questions/25390099/awesomium-javascript-handler-being-called-indefinitely Returning value to C# function from Javascript not working in Awesomium
我终于将其缩小到违规行。
在我的文档中,我加载了一个源脚本:
<script src="http://d3js.org/d3.v3.min.js"></script>
这似乎打破了我的整个自定义可视化;它从我所见过的无限尝试重新加载页面。这是我的C#代码:
private void WebViewOnDomReady(object sender, EventArgs eventArgs)
{
webView.DomReady -= WebViewOnDomReady;
webView.CreateObject("jsobject");
//webView.SetObjectCallback("jsobject", "callNETNoReturn", JSHandler);
webView.SetObjectCallback("jsobject", "callNETWithReturn", JSHandler);
//webView.ExecuteJavascript("myMethod()");
var result = webView.ExecuteJavascriptWithResult("myMethodProvidingReturn('foo')");
MessageBox.Show("Stuff:" + result.ToString());
}
private void JSHandler(object sender, JSCallbackEventArgs args)
{
var result = webView.ExecuteJavascriptWithResult("myMethodProvidingReturn('foo')");
MessageBox.Show(result.ToString());
MessageBox.Show("Got method call with no return request");
}
这是我的Javascript代码:
<script src="http://d3js.org/d3.v3.min.js"></script>
<script>
function myMethod() {
document.write("In myMethod, calling .NET but expecting no return value.<br/>");
jsobject.callNETNoReturn();
}
function myMethodExpectingReturn() {
document.write("In myMethodExpectingReturn, calling .NET and expecting return value.<br/>");
var returnVal2 = jsobject.callNETWithReturn("foo");
document.write("Got value from .NET: " + returnVal2 + "<br/>");
}
function myMethodProvidingReturn(whatToReturn) {
var returnVal = whatToReturn + "bar";
document.write("Returning '" + returnVal + "' to .NET.");
return returnVal;
}
</script>
有趣的是,如果我不尝试调用Javascript函数并在C#中获取返回值,则HTML加载正常。但是,当我尝试返回JS函数的结果并在C#中打印时,包括脚本src行会破坏我的整个代码;它无限地返回一个空白消息,从我设置的MessageBoxes判断。
这让我感到困惑,因为它似乎意味着HTML被反复加载。由于某些奇怪的原因,设置脚本src标记会导致此无限循环。
到底发生了什么?
由于