gpt4 book ai didi

android - Android 中的 Webview 适用于 4.2+ 而不是 2.3.3

转载 作者:行者123 更新时间:2023-11-29 21:08:31 25 4
gpt4 key购买 nike

在 Android 4.2.2 中使用 webview javascriptInterface 的应用程序在 Android 2.3.3 中不工作。

它有 targetSdkVersion="19"

和 Build 属性为 4.2

我已经用 2.3.3 和 Device 3.7"WVGA 创建了模拟器。

OnCreate 在这里 -

@JavascriptInterface
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

vWebview = (WebView) findViewById(R.id.vWebview);
btnView = (Button) findViewById(R.id.btnView);
txtView = (TextView) findViewById(R.id.txtView);

vWebview.setWebChromeClient(new WebChromeClient());
vWebview.setWebViewClient(new WebViewClient());

try {
if ("2.3".equals(Build.VERSION.RELEASE)) {
javascriptInterfaceBroken = true;
}
} catch (Exception e) {
// Ignore, and assume user javascript interface is working correctly.
}

// Add javascript interface only if it's not broken
if (!javascriptInterfaceBroken) {
vWebview.addJavascriptInterface(new JScriptInterface(),
"AndroidFunction");
}



WebSettings websetting = vWebview.getSettings();
websetting.setJavaScriptEnabled(true);
Log.d("Main", "Called");
vWebview.loadUrl("file:///android_asset/sample.html");
btnView.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

//vWebview.loadUrl("javascript:showAndroidToast('Hello')");
try{
runOnUiThread(new Runnable() {
@Override
public void run() {
vWebview.loadUrl("javascript:showAndroidToast('Hello')");
}
});
}
catch(Exception ee){
Log.d("Exception", "Called" + ee.toString());

}
}
});

}

JsInterface-

public class JScriptInterface {

public JScriptInterface() {
// TODO Auto-generated constructor stub
}



public void showToast(String toast) {
try{
Log.d("JS", "Called" + toast);
// txtView.setText(toast);
Toast.makeText(MainActivity.this, toast, Toast.LENGTH_LONG).show();
}
catch(Exception ee){
Toast.makeText(MainActivity.this, ee.toString(), Toast.LENGTH_LONG).show();

}
}



}

最佳答案

我想您可能遇到了 this known issue .以下是解决方法:Handling Android 2.3 WebView’s broken AddJavascriptInterface

致谢 original poster here

将来,请考虑更详细地描述您的问题。 “这不起作用”并没有给出任何问题的想法,所以我只是用谷歌搜索“javascriptinterface 2.3.3”——话又说回来,你可以自己完成。

UPD您需要将解决方法中的方法作为对您的 WebViewClient 的覆盖。对于您的代码,它应该看起来像这样:

vWebview.setWebChromeClient(new WebChromeClient());

try {
if ("2.3".equals(Build.VERSION.RELEASE)) {
javascriptInterfaceBroken = true;
}
} catch (Exception e) {
// Ignore, and assume user javascript interface is working correctly.
}
// Add javascript interface only if it's not broken
if (!javascriptInterfaceBroken) {
vWebview.addJavascriptInterface(new JScriptInterface(),
"AndroidFunction");
}

if (!javaScriptInterfaceBroken) vWebview.setWebViewClient(new WebViewClient());
else {
vWebview.setWebViewClient(new WebViewClient() {
// And here you put the code from the article
@Override
public void onPageFinished(WebView view, String url) { ... }

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) { ... }
});
}

关于android - Android 中的 Webview 适用于 4.2+ 而不是 2.3.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23708675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com