我正在使用CefGlue对浏览器执行JavaScript代码。
if (browser.GetMainFrame().V8Context.TryEval(script, out returnValue, out ex)) {
if (returnValue != null) {
SetClientValuetFromV8Value(returnValue, result);
}
}
这是负责将CefV8Value与.NET数据类型匹配的方法
private static void SetClientValuetFromV8Value(CefV8Value returnValue, JSResult result) {
if (returnValue == null) {
throw new ArgumentNullException("returnValue");
}
if (result == null) {
throw new ArgumentNullException("result");
}
object v = null;
string type;
if (returnValue.IsString) {
v = returnValue.GetStringValue();
}
else if (returnValue.IsInt) {
v = returnValue.GetIntValue();
}
else if (returnValue.IsBool) {
v = returnValue.GetBoolValue();
}
else if (returnValue.IsDate) {
v = returnValue.GetDateValue();
}
else if (returnValue.IsDouble) {
v = returnValue.GetDoubleValue();
}
else if (returnValue.IsArray) {
// what do we put in here??
}
else if (returnValue.IsObject) {
// what do we put in here??
}
result.JsValue = new JSValue(v);
}
在我看来,当IsObject
或IsArray
返回true时,无法获得该值。 GetObjectValue()
或GetArrayValues()
我知道我可以让我的javascript代码在返回之前将所有内容转换为字符串,但这不是我需要的。