使用WebView在现场调用JS
Call JS on site using WebView
有一个网站我想要 运行 JS 脚本,例如:
document.getElementById("statuses").rows[2].cells[1].firstChild.nodeValue
并得到一些结果。我添加了 WebView
并尝试实现它:
MainActivity.OnCreate
WebView wv = FindViewById<WebView>(Resource.Id.webView);
wv.Settings.JavaScriptEnabled = true;
wv.SetWebViewClient(new Client());
wv.LoadUrl("http://inout.test.com/");
然后 克莱因特
public class Client : WebViewClient {
public override void OnPageFinished(WebView view, string url) {
base.OnPageFinished(view, url);
var script = $"javascript: document.getElementById(\"statuses\").rows[2].cells[1].firstChild.nodeValue";
//view.LoadUrl($"javascript: {script}");
view.EvaluateJavascript(script , new JsResult());
}
}
和JsResult
public class JsResult : Java.Lang.Object, IValueCallback {
public string Result;
public void OnReceiveValue(Java.Lang.Object value) {
Result = ((Java.Lang.String)value).ToString();
}
}
但是Result
总是空的!我做错了什么?是否有可能从 JS 中获取价值?请帮忙。
如果你执行
function() { alert('hello world'); return 42; } ()
在 Chrome 开发者控制台中,您最终得到
你只需要使用正确的括号:
(function() { alert('hello world'); return 42; }) ()
然后你会看到:
有一个网站我想要 运行 JS 脚本,例如:
document.getElementById("statuses").rows[2].cells[1].firstChild.nodeValue
并得到一些结果。我添加了 WebView
并尝试实现它:
MainActivity.OnCreate
WebView wv = FindViewById<WebView>(Resource.Id.webView);
wv.Settings.JavaScriptEnabled = true;
wv.SetWebViewClient(new Client());
wv.LoadUrl("http://inout.test.com/");
然后 克莱因特
public class Client : WebViewClient {
public override void OnPageFinished(WebView view, string url) {
base.OnPageFinished(view, url);
var script = $"javascript: document.getElementById(\"statuses\").rows[2].cells[1].firstChild.nodeValue";
//view.LoadUrl($"javascript: {script}");
view.EvaluateJavascript(script , new JsResult());
}
}
和JsResult
public class JsResult : Java.Lang.Object, IValueCallback {
public string Result;
public void OnReceiveValue(Java.Lang.Object value) {
Result = ((Java.Lang.String)value).ToString();
}
}
但是Result
总是空的!我做错了什么?是否有可能从 JS 中获取价值?请帮忙。
如果你执行
function() { alert('hello world'); return 42; } ()
在 Chrome 开发者控制台中,您最终得到
你只需要使用正确的括号:
(function() { alert('hello world'); return 42; }) ()
然后你会看到: