javascript - Android webView - 没有调用javascript代码
问题描述
我尝试在我的 webview 中加载这个 javascript:
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fullscreen);
website = "https://www.blizz-z.de";
myWebView = findViewById(R.id.blizzView);
WebSettings settings = blizzView.getSettings();
settings.setJavaScriptEnabled(true);
myWebView.setWebViewClient(new WebViewClient() {
@Override
// Notify the host application that a page has finished loading.
public void onPageFinished(WebView view, String url)
{
myWebView.loadUrl(
"javascript:(function() {" +
"setInterval(function() {" +
+ "jQuery('#myInput').css('background', '#'+(Math.random()*0xFFFFFF<<0).toString(16));"
+ "}, 1000);"
+ "});"
);
}
}
...
}
但它没有被执行。如果我在桌面浏览器中执行脚本,那么它就可以工作。它只是为了测试目的而更改了我网站上搜索栏的背景颜色。
setInterval
webView 不支持?
更新:
我用js
@mohkamfer 的回答中的函数进行了尝试:
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fullscreen);
website = "https://www.blizz-z.de";
blizzView = findViewById(R.id.blizzView);
WebSettings settings = blizzView.getSettings();
settings.setJavaScriptEnabled(true);
myWebView.setWebViewClient(new WebViewClient() {
@Override
// Notify the host application that a page has finished loading.
public void onPageFinished(WebView view, String url)
{
js(myWebView, "(function() {" +
"setInterval(function() {" +
+ "jQuery('#myInput').css('background', '#'+(Math.random()*0xFFFFFF<<0).toString(16));"
+ "}, 1000);"
+ "});"
);
}
}
...
}
public void js(WebView view, String code)
{
String javascriptCode = "javascript:" + code;
if (Build.VERSION.SDK_INT >= 19) {
view.evaluateJavascript(javascriptCode, new ValueCallback<String>() {
@Override
public void onReceiveValue(String response) {
Log.i("debug_log", response);
}
});
} else {
view.loadUrl(javascriptCode);
}
}
但这没有什么区别。
解决方案
您是否在 API 19 或更高版本上进行部署?如果是这样,您将不得不使用WebView#evalulateJavascript
而不是WebView#loadUrl
我总是使用这种方法来简化和加快事情
public void js(String code) {
if (Build.VERSION.SDK_INT >= 19) {
this.evaluateJavascript(code, new ValueCallback<String>() {
@Override
public void onReceiveValue(String response) {
}
});
} else {
this.loadUrl("javascript:" + code);
}
}
推荐阅读
- nginx - nginx 无法启动并为 sudo nginx -t 抛出错误
- javascript - 在节点 API 中接收完整日期时间,而不是仅接收日期
- java - 在返回的排序 ArrayList 上使用覆盖的 toString 方法不会考虑换行符
- python-3.x - 为什么即使条件为假也执行行?
- css - Divi 联系表帮助 - 我可以在一侧对齐某些元素而不是默认排序吗?
- flutter - 颤振错误字符串函数()不能分配给“字符串”类型的变量
- javascript - 从响应中仅提取所需的变量 - Angular 7
- android - android build gradle tasks中的gradle task compileRdm是什么意思?
- mongodb - 将 MongoDB 的 _id 暴露给前端有危险吗?
- javascript - 如何使用单选按钮在 URL 中添加和删除字符?(Javascript)