#javascript #android #xamarin #xamarin.android #android-webview
#javascript #Android #xamarin #xamarin.android #android-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? Пожалуйста, помогите.
Комментарии:
1.
return 42;
возвращает целое число / число. Вы посмотрели на фактический типvalue
?2. Я думаю, это не имеет значения, потому что я пытался вернуть «Привет» вместо 42. Фактический тип
value
Java.Lang.Object
3. Извините за «фактический тип», я имел в виду тип самого объекта, а не переменной. Тип объекта такой
Java.Lang.String
.
Ответ №1:
Если вы выполните
function() { alert('hello world'); return 42; } ()
в консоли разработчика Chrome вы получите
Вам просто нужно использовать правильные скобки:
(function() { alert('hello world'); return 42; }) ()
И тогда вы видите:
Комментарии:
1. Извините, сэр. Я поддерживаю ваш ответ, но в вопросе есть ошибка (моя ошибка). Я исправил идентификатор. Пожалуйста, посмотрите и помогите. Еще раз спасибо и извините
2. вы сначала выполнили его в Chrome, чтобы посмотреть, возвращает ли он то, что вы ожидаете? ^^
3. также я пробовал это:
(function(){return document.getElementById('statuses').rows[2].cells[1].firstChild.nodeValue;})()
но никакого результата. Могу ли я запускать JS на любых веб-сайтах или он должен быть особенным4. просто удалите
javascript:
. Это работает в моем тесте.(function(){...})()
Способ тоже работает5. Нет, результата нет. Не могли бы вы, пожалуйста, проверить это на этом реальном веб-сайте inout.osdn.nl ? Может быть, с этим есть какие-то проблемы / Спасибо