- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
不工作-6ren"> 不工作-我在网站上保存了一个 html 文件。 https://pinapakait.com/cam/testcam.html 它有以下简单的输入类型文件代码input type="file"accept="-6ren">
我在网站上保存了一个 html 文件。
https://pinapakait.com/cam/testcam.html
它有以下简单的输入类型文件代码input type="file"accept="image/*;capture=camera"
当通过网络浏览器在移动设备中打开时,它正在打开文件、相机选项。但是现在在 android 的 web View 中打开。
非常感谢您的帮助。
授予以下权限
uses-permission android:name="android.permission.INTERNET"
uses-permission android:name="android.permission.CAMERA"
uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
uses-feature android:name="android.hardware.camera" android:required="true"
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"
uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE"
uses-permission android:name="android.permission.READ_INTERNAL_STORAGE"
为 WebView 设置以下设置。
setLoadsImagesAutomatically(true)
setJavaScriptEnabled(true)
setDomStorageEnabled(true)
setLoadWithOverviewMode(true)
setPluginState(WebSettings.PluginState.ON)
setMediaPlaybackRequiresUserGesture(false)
setPluginState(WebSettings.PluginState.ON)
setAppCacheEnabled(true)
setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY)
setAllowFileAccessFromFileURLs(true)
setAllowUniversalAccessFromFileURLs(true)
setJavaScriptCanOpenWindowsAutomatically(true)
setBuiltInZoomControls(true)
setPluginsEnabled(true)
setAllowFileAccess(true)
setAllowContentAccess(true)
setSupportZoom(true)
最佳答案
我在 webview 上遇到了同样的问题,在谷歌搜索后,我通过扩展 WebChromeClient 找到了这个解决方案。
public class MyWebChromeClient extends WebChromeClient {
DetailsFragmentWebView context;
public ValueCallback<Uri> mUploadMessage;
public ValueCallback<Uri[]> mUploadMessageAboveL;
public Uri mCapturedImageURI;
public MyWebChromeClient(DetailsFragmentWebView context){
this.context = context;
//this.mCapturedImageURI = mCapturedImageURI;
//this.mUploadMessage = mUploadMessage;
//this.mUploadMessageAboveL = mUploadMessageAboveL;
}
// openFileChooser for Android 3.0+
public void openFileChooser(ValueCallback<Uri> uploadMsg, ValueCallback<Uri[]> uploadMsgAboveL, String acceptType){
// Update message
mUploadMessage = uploadMsg;
mUploadMessageAboveL = uploadMsgAboveL;
try{
// Create AndroidExampleFolder at sdcard
File imageStorageDir = new File(
Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES)
, "AndroidExampleFolder");
if (!imageStorageDir.exists()) {
// Create AndroidExampleFolder at sdcard
imageStorageDir.mkdirs();
}
// Create camera captured image file path and name
File file = new File(
imageStorageDir + File.separator + "IMG_"
+ String.valueOf(System.currentTimeMillis())
+ ".jpg");
mCapturedImageURI = Uri.fromFile(file);
// Camera capture image intent
final Intent captureIntent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
// Create file chooser intent
Intent chooserIntent = Intent.createChooser(i, "Image Chooser");
// Set camera intent to file chooser
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS
, new Parcelable[] { captureIntent });
// On select image call onActivityResult method of activity
context.startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE);
}
catch(Exception e){
Toast.makeText(context.getActivity(), "Chrome Exception:"+e,
Toast.LENGTH_LONG).show();
}
}
//openFileChooser for other Android versions
public void openFileChooser(ValueCallback<Uri> uploadMsg,
String acceptType,
String capture) {
openFileChooser(uploadMsg , mUploadMessageAboveL, acceptType);
}
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
openFileChooser(null ,filePathCallback , "");
return true;
}
}
然后将您的 webview 设置为使用此类:
MyWebChromeClient myChromeClient = new myChromeClient(this);
webView.webChromeClient = myChromeClient;
您还需要将此代码添加到您的 Activity 中:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
//super.onActivityResult(requestCode, resultCode, data)
if (requestCode == FILECHOOSER_RESULTCODE) {
if (null == myChromeClient.mUploadMessage && null == myChromeClient.mUploadMessageAboveL) return
val result = if (resultCode != RESULT_OK) null
else if (data!=null) data.data
else myChromeClient.mCapturedImageURI
if (myChromeClient.mUploadMessageAboveL != null) {
onActivityResultAboveL(requestCode, resultCode, data)
} else if (myChromeClient.mUploadMessage != null) {
myChromeClient.mUploadMessage?.onReceiveValue(result)
myChromeClient.mUploadMessage = null
}
}
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private fun onActivityResultAboveL(requestCode: Int, resultCode: Int, intent: Intent?) {
if (requestCode != FILECHOOSER_RESULTCODE || myChromeClient.mUploadMessageAboveL == null)
return
var results: Array<Uri>? = null
if (resultCode == Activity.RESULT_OK) {
if (intent != null) {
val dataString = intent.dataString
val clipData = intent.clipData
if (clipData != null) {
results = Array<Uri>(clipData.itemCount) { _->return Unit}
for (i in 0 until clipData.itemCount) {
val item = clipData.getItemAt(i)
results[i] = item.uri
}
}
if (dataString != null)
results = arrayOf(Uri.parse(dataString))
}else if (myChromeClient.mCapturedImageURI!=null)
results = arrayOf(myChromeClient.mCapturedImageURI)
}
myChromeClient.mUploadMessageAboveL?.onReceiveValue(results)
myChromeClient.mUploadMessageAboveL = null
}
关于Android WebView <输入类型 ="file"> 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62619834/
我在Windows 10中使用一些简单的Powershell代码遇到了这个奇怪的问题,我认为这可能是我做错了,但我不是Powershell的天才。 我有这个: $ix = [System.Net.Dn
var urlsearch = "http://192.168.10.113:8080/collective-intellegence/StoreClicks?userid=" + userId +
我有一个非常奇怪的问题,过去两天一直让我抓狂。 我有一个我试图控制的串行设备(LS 100 光度计)。使用设置了正确参数的终端(白蚁),我可以发送命令(“MES”),然后是定界符(CR LF),然后我
我目前正试图让无需注册的 COM 使用 Excel 作为客户端,使用 .NET dll 作为服务器。目前,我只是试图让概念验证工作,但遇到了麻烦。 显然,当我使用 Excel 时,我不能简单地使用与可
我开发了简单的 REST API - https://github.com/pavelpetrcz/MandaysFigu - 我的问题是在本地主机上,WildFly 16 服务器的应用程序运行正常。
我遇到了奇怪的情况 - 从 Django shell 创建一些 Mongoengine 对象是成功的,但是从 Django View 创建相同的对象看起来成功,但 MongoDB 中没有出现任何数据。
我是 flask 的新手,只编写了一个相当简单的网络应用程序——没有数据库,只是一个航类搜索 API 的前端。一切正常,但为了提高我的技能,我正在尝试使用应用程序工厂和蓝图重构我的代码。让它与 pus
我的谷歌分析 JavaScript 事件在开发者控制台中运行得很好。 但是当从外部 js 文件包含在页面上时,它们根本不起作用。由于某种原因。 例如; 下面的内容将在包含在控制台中时运行。但当包含在单
这是一本名为“Node.js 8 the Right Way”的书中的任务。你可以在下面看到它: 这是我的解决方案: 'use strict'; const zmq = require('zeromq
我正在阅读文本行,并创建其独特单词的列表(在将它们小写之后)。我可以使它与 flatMap 一起工作,但不能使它与 map 的“子”流一起工作。 flatMap 看起来更简洁和“更好”,但为什么 di
我正在编写一些 PowerShell 脚本来进行一些构建自动化。我发现 here echo $? 根据前面的语句返回真或假。我刚刚发现 echo 是 Write-Output 的别名。 写主机 $?
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我将一个工作 View Controller 类从另一个项目复制到一个新项目中。我无法在新项目中加载 View 。在旧项目中我使用了presentModalViewController。在新版本中,我
我对 javascript 很陌生,所以很难看出我哪里出错了。由于某种原因,我的功能无法正常工作。任何帮助,将不胜感激。我尝试在外部 js 文件、头部/主体中使用它们,但似乎没有任何效果。错误要么出在
我正在尝试学习Flutter中的复选框。 问题是,当我想在Scaffold(body :)中使用复选框时,它正在工作。但我想在不同的地方使用它,例如ListView中的项目。 return Cente
我们当前使用的是 sleuth 2.2.3.RELEASE,我们看不到在 http header 中传递的 userId 字段没有传播。下面是我们的代码。 BaggageField REQUEST_I
我有一个组合框,其中包含一个项目,比如“a”。我想调用该组合框的 Action 监听器,仅在手动选择项目“a”完成时才调用。我也尝试过 ItemStateChanged,但它的工作原理与 Action
你能看一下照片吗?现在,一步前我执行了 this.interrupt()。您可以看到 this.isInterrupted() 为 false。我仔细观察——“这个”没有改变。它具有相同的 ID (1
我们当前使用的是 sleuth 2.2.3.RELEASE,我们看不到在 http header 中传递的 userId 字段没有传播。下面是我们的代码。 BaggageField REQUEST_I
我正在尝试在我的网站上设置一个联系表单,当有人点击发送时,就会运行一个作业,并在该作业中向所有管理员用户发送通知。不过,我在失败的工作表中不断收到此错误: Illuminate\Database\El
我是一名优秀的程序员,十分优秀!