gpt4 book ai didi

javascript - Android webview - JavaScript 回调不起作用?

转载 作者:太空狗 更新时间:2023-10-29 13:07:10 26 4
gpt4 key购买 nike

我正在使用 WebView 在 Android 应用程序上显示网页。 https://developer.android.com/guide/webapps/webview.html

单击 HTML 中的按钮后,我可以成功进入 Android 类 WebAppInterface(来自示例)并显示“Toast”警报,但试图回调到定义的 javacsript 函数在我的网页中无法正常工作。

这是网页的代码:(Android.html)

<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />

<script type="text/javascript">
function showAndroidToast(toast) {
if (typeof Android != 'undefined')
Android.showToast(toast);


}

function ChangeColor()
{
document.body.style.background = 'pink';
}
</script>

这是 Android 应用的 MainActivity 的代码。它加载 url 并显示它。

public class MainActivity extends AppCompatActivity {

WebView m_Webview;

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

m_Webview = (WebView) findViewById(R.id.webview);

WebSettings webSettings = m_Webview.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
m_Webview.setWebViewClient(new WebViewClient());
m_Webview.loadUrl("android.html");


WebView webView = (WebView) findViewById(R.id.webview);
webView.addJavascriptInterface(new WebAppInterface(this,webView), "Android");
}
}

这是 Android 应用程序上的 WebAppInterface:

public class WebAppInterface {

Context mContext;
WebView mView;

/** Instantiate the interface and set the context */
WebAppInterface(Context c,WebView w) {
mContext = c;
mView = w;
}

/** Show a toast from the web page */
@JavascriptInterface
public void showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
mView.loadUrl("javascript:ChangeColor()");
}
}

显示 toast 后,JavaScript 函数 ChangeColor 未被调用。

有关更多引用,请参阅:https://stackoverflow.com/a/14145116/7751339

谢谢!

最佳答案

解决方案是像这样使用“发布”功能:

public void showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
// WebView Web = new WebView(mContext);
// mView.getSettings().setUserAgentString("Android WebView");
mView.post(new Runnable() {
public void run() {
mView.loadUrl("javascript:ChangeColor()");
}
});
}

同样在 KitKat 和 forward 上你需要使用 evaluateJavascript:

mView.evaluateJavascript("ChangeColor();",null);

关于javascript - Android webview - JavaScript 回调不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46393658/

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