android - navigator.share 在 WebView 中不起作用
问题描述
navigator.share()
JavaScript 函数在我的 Android 应用程序的 WebView 中不起作用是否有原因?通过网络浏览器访问相同的 URL 时,会弹出原生 Android 共享对话框,但从我的应用程序的 WebView 访问 URL 时不会。
- 该 URL 使用 https。
- 共享操作由用户触发 onClick。
setJavaScriptEnabled
设置为true
。setDomStorageEnabled
也设置为true
。
解决方案
最终,我为我的 webviews 使用了以下设置。对我来说,不仅仅是 . navigator.share
,但对我有用的东西可能对其他人有用。值得一试。
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setDomStorageEnabled(true);
mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
mWebView.getSettings().setAppCacheEnabled(false);
mWebView.getSettings().setAllowFileAccess(true);
mWebView.getSettings().setAllowContentAccess(true);
mWebView.getSettings().setMediaPlaybackRequiresUserGesture(false);
mWebView.addJavascriptInterface(new JavaScriptShareInterface(), "AndroidShareHandler");
AndroidShareHandler 将成为一个全局 JavaScript 函数,该函数将在 webview 中可用,并且可以通过单击按钮来触发,例如:
爪哇:
package com.your.package;
import android.webkit.JavascriptInterface;
public class JavaScriptShareInterface {
@JavascriptInterface
public void share(String url) {
// your share action
}
}
JavaScript:
shareButton.addEventListener('click', () => {
window.AndroidShareHandler.share('https://stackoverflow.com');
});
推荐阅读
- angular - 如何根据一组markdown文件生成Angular组件?
- sql - 如何使用函数在 postgresql 上用数据间隔填充表
- python - Pickle 不保存对象的实例
- python - 如何在熊猫数据透视表中聚合仅超过 1 个的组
- javascript - 创建面包屑路径
- swift - 防止其他人发送虚假 HTTP 发布请求正文的最佳方法是什么?
- javascript - 如何在没有用户点击的情况下复制
- arrays - Fixed form Fortran Allocate array with size to be read from file
- c# - 在 C# 中堆叠盒子而不超过特定高度
- laravel - Laravel:如果没有其他模型共享它,则级联删除模型