㈠ webview 調用系統瀏覽器怎麼解決
WebView(網路視圖)能載入顯示網頁,可以將其視為一個瀏覽器。它使用了WebKit渲染引擎載入顯示網頁,實現WebView有以下兩種不同的方法:
第一種方法的步驟:
1.在要Activity中實例化WebView組件:WebView webView = new WebView(this);
2.調用WebView的loadUrl()方法,設置WevView要顯示的網頁:
互聯網用:webView.loadUrl("");
本地文件用:webView.loadUrl("file:///android_asset/XX.html"); 本地文件存放在:assets 文件中
3.調用Activity的setContentView( )方法來顯示網頁視圖
4.用WebView點鏈接看了很多頁以後為了讓WebView支持回退功能,需要覆蓋覆蓋Activity類的onKeyDown()方法,如果不做任何處理,點擊系統回退剪鍵,整個瀏覽器會調用finish()而結束自身,而不是回退到上一頁面
5.需要在AndroidManifest.xml文件中添加許可權,否則會出現Web page not available錯誤。
第二種方法的步驟:
1、在布局文件中聲明WebView
2、在Activity中實例化WebView
3、調用WebView的loadUrl( )方法,設置WevView要顯示的網頁
4、為了讓WebView能夠響應超鏈接功能,調用setWebViewClient( )方法,設置 WebView視圖
5、用WebView點鏈接看了很多頁以後為了讓WebView支持回退功能,需要覆蓋覆蓋Activity類的onKeyDown()方法,如果不做任何處理,點擊系統回退剪鍵,整個瀏覽器會調用finish()而結束自身,而不是回退到上一頁面
6、需要在AndroidManifest.xml文件中添加許可權,否則出現Web page not available錯誤。
㈡ 如何設置webview調用android方法
1、映射Java對象到JavaScript對象上
復制代碼 代碼如下:
mWebView = (WebView) findViewById(R.id.wv_content);
mWebView.setVerticalScrollbarOverlay(true);
final WebSettings settings = mWebView.getSettings();
settings.setSupportZoom(true);
//WebView啟用Javascript腳本執行
settings.setJavaScriptEnabled(true);
settings.(true);
//映射Java對象到一個名為」js2java「的Javascript對象上
//JavaScript中可以通過"window.js2java"來調用Java對象的方法
mWebView.addJavascriptInterface(new JSInvokeClass(), "js2java");
㈢ 在webview中本地代碼如何與javascript進行交互,調用什麼方法,以及需要注意的事
可以,只要你是用webview打開的,那麼不管事遠程還是本地,都可以通過webview與app的本地java代碼進行交互。沒有任何區別。
1、webview必須設置支持Javascript
mWebview.getSettings().setJavaScriptEnabled(true);
2、加進一個回調的代理類JavaScriptInterface,並給它一個調用的名稱:ncp
mWebView.addJavascriptInterface(new JavaScriptInterface(), "ncp");
final class JavaScriptInterface {
public int callOnJs() {
return 1000;
}
public void callOnJs2(String mode) {
//TODO
}
}
3、JS頁面
<script type="text/javascript">
window.onload = function(){
document.getElementById('btn_1').addEventListener('click', onBtnClick, false);
var _int_value = window.ncp.callOnJs();
alert("get int from java:" + _int_value );
}
function onBtnClick() {
window.ncp.callOnJs2("click");
}
</script>
接下來就可以調用js方法了,
1、Java調用js方法
mWebView.loadUrl("javascript:onSaveCallback()");
2、JS訪問java方法
window.ncp.callOnJs2("click");
㈣ webview 怎麼調用指定的本地頁面上的js方法,跪求大神指點
webview是android的嗎,webview是控制項,本身就代表一個瀏覽器,不能直接調用JS只能通過html或動態頁面來調用JS,在webview中顯示,另外手機端支持的JS不如PC端這么多
㈤ wkwebview 怎麼調用js方法
//直接調用js
//webView.evaluateJavaScript("hi()", completionHandler: nil)
//調用js帶參數
//webView.evaluateJavaScript("hello('')", completionHandler: nil)
//調用js獲取返回值
//webView.evaluateJavaScript("getName()") { (any,error) -> Void in
// NSLog("%@", any as! String)
//}
- (void)hello:(NSString *)param{
[self showAlert:param Title:@"js Call iOS"];
}
㈥ Android WebView 調用系統拍照和相冊
由於業務需要,APP內嵌H5,需要調去系統相冊和拍照,網上找了點資料,整理一下,供大家參考:
private static final int REQUEST_CAMERA =1;
private static final int REQUEST_CHOOSE =2;
private ValueCallbackmUploadMessage;
private ;
private UricameraUri;
//5.0以後的方法
webView.setWebChromeClient(new WebChromeClient() {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) {
if (mUploadMessagesAboveL !=null) {
mUploadMessagesAboveL.onReceiveValue(null);
mUploadMessagesAboveL =null;
}else {
mUploadMessagesAboveL = filePathCallback;
selectImage();
}
return true;
}
});
//選擇圖片和拍照,對應的string文件,可以自己寫死:拍照,相冊,取消
private void selectImage() {
ActionSheet.createBuilder(this, getSupportFragmentManager()).
setOtherButtonTitles(new String[]{getResources().getString(R.string.common_tip_photos), getResources().getString(R.string.common_picture)}).
setCancelButtonTitle(getResources().getString(R.string.common_cancel)).setCancelableOnTouchOutside(true).setListener(new ActionSheet.ActionSheetListener() {
public void onDismiss(ActionSheet actionSheet, boolean isCancel) {
if (mUploadMessage !=null) {
mUploadMessage.onReceiveValue(null);
mUploadMessage =null;
}
if (mUploadMessagesAboveL !=null) {
mUploadMessagesAboveL.onReceiveValue(null);
mUploadMessagesAboveL =null;
}
actionSheet.dismiss();
}
@RequiresApi(api = Build.VERSION_CODES.M)
public void onOtherButtonClick(ActionSheet actionSheet, int index) {
switch (index) {
case 0:
chosePicture();
break;
case 1:
setRequestCamera();
}
}
}).show();
}
//拍照,添加許可權申請 這個可以自己寫下,我這邊是項目中寫好的,直接拿過來用了
public void setRequestCamera() {
permissionsBuilder =new YXTPermissionsBuilder.Builder(this)
.setOnGrantedListener((requestCode, perms) -> {
openCamera();
})
.setRationale4NeverAskAgain(LanguageUtils.isEnglish() ? String.format(getString(R.string.permission_tips), getString(R.string.common_camera), getString(R.string.app_name), getString(R.string.app_name)) :
String.format(getString(R.string.permission_tips), getString(R.string.app_name), getString(R.string.common_camera), getString(R.string.app_name)))
//必需
.setRequestCode(ConstantsData.GET_CAMERA)
.build();
permissionsBuilder.requestPermissions(Manifest.permission.CAMERA);
}
/**
* 本地相冊選擇圖片
*/
private void chosePicture() {
Intent innerIntent =new Intent(Intent.ACTION_GET_CONTENT, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
innerIntent.setType("image/*");
Intent wrapperIntent = Intent.createChooser(innerIntent, null);
startActivityForResult(wrapperIntent, REQUEST_CHOOSE);
}
/**
* 打開照相機
*/
private void openCamera() {
Intent intent =new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
String imagePaths = Environment.getExternalStorageDirectory().getPath() +"/pbccrc/Images/" + (System.currentTimeMillis() +".jpg");
// 必須確保文件夾路徑存在,否則拍照後無法完成回調
File vFile =new File(imagePaths);
if (!vFile.exists()) {
File vDirPath = vFile.getParentFile();
vDirPath.mkdirs();
}else {
if (vFile.exists()) {
vFile.delete();
}
}
cameraUri = FileProvider.getUriForFile(
this,
getPackageName() +".fileprovider",
vFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, cameraUri);
startActivityForResult(intent, REQUEST_CAMERA);
}
/**
* 選擇照片後結束
*
* @param data
*/
private UriafterChosePic(Intent data) {
if (data !=null) {
final String path = data.getData().getPath();
if (path !=null && (path.endsWith(".png") || path.endsWith(".PNG") || path.endsWith(".jpg") || path.endsWith(".JPG"))) {
return data.getData();
}else {
Toast.makeText(this, "上傳的圖片僅支持png或jpg格式", Toast.LENGTH_SHORT).show();
}
}
return null;
}
/**
* 返迴文件選擇
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (mUploadMessagesAboveL !=null) {
onActivityResultAboveL(requestCode, resultCode, intent);
}
if (mUploadMessage ==null)return;
Uri uri =null;
if (requestCode ==REQUEST_CAMERA && resultCode ==RESULT_OK) {
uri =cameraUri;
Log.e("onActivityResult: " + uri.toString());
}
if (requestCode ==REQUEST_CHOOSE && resultCode ==RESULT_OK) {
uri = afterChosePic(intent);
}
mUploadMessage.onReceiveValue(uri);
mUploadMessage =null;
super.onActivityResult(requestCode, resultCode, intent);
}
/**
* 5.0以後機型 返迴文件選擇
*
* @param requestCode
* @param resultCode
* @param data
*/
private void onActivityResultAboveL(int requestCode, int resultCode, Intent data) {
Uri[] results =null;
if (requestCode ==REQUEST_CAMERA && resultCode ==RESULT_OK) {
results =new Uri[]{cameraUri};
}
if (requestCode ==REQUEST_CHOOSE && resultCode ==RESULT_OK) {
if (data !=null) {
String dataString = data.getDataString();
if (dataString !=null)
results =new Uri[]{Uri.parse(dataString)};
}
}
mUploadMessagesAboveL.onReceiveValue(results);
mUploadMessagesAboveL =null;
return;
}
基本都可以拿去用了,希望有幫助
㈦ wkwebview中 oc怎麼調用js中的方法
//直接調用js//webView.evaluateJavaScript("hi()",completionHandler:nil)//調用js帶參數//webView.evaluateJavaScript("hello('')",completionHandler:nil)//調用js獲取返回值//webView.evaluateJavaScript("getName()"){(any,error)->Voidin//NSLog("%@",anyas!String)//}-(void)hello:(NSString*)param{[selfshowAlert:paramTitle:@"jsCalliOS"];}
㈧ 小程序webview調用微信掃一掃的「曲折」思路
自上一篇遇到 webview 中沒有返回按鈕之後,雖然跳出坑了。解決方案: 《小程序webview跳轉頁面後沒有返回按鈕完美解決方案》
做為一名面向搜索引擎開發的我,遇到問題的第一件事,當然是網路啊,Google啊!可是這種在過去都是無往不利的方法,突然失效了!翻遍整個瀏覽器,並且把整個互聯網都翻了個底朝天,竟然「找不到」解決方案(很有可能是我搜索水平太差,沒有精通面向搜索引擎開發這項技能)!
無奈之下,只得另尋他法。我在上一篇文章中提到過,可以在 H5 頁面使用 wx.miniProgram.navigateTo 方法跳轉到小程序頁面。所以,得好好的利用這個方法,搞點事情。
想想看,既然能跳轉到小程序,而小程序本身調用掃一掃是非常方便的,只需要使用 wx.scanCode 即可。那麼也就是說,當用戶點擊掃碼操作的時候。我們可以先跳轉到小程序頁面,在頁面 onload 的時候,立馬調用 wx.scanCode ,也就達到了點擊 H5 頁面按鈕喚起掃碼功能的效果。然後把掃碼結果,通過設置 webview 的 url 參數的形式返回給 H5 頁面,最後在 H5 頁面處理掃碼結果。整個流程分析下來,可以說是天衣無縫,非常完美,理論上來說,是完全成立的。接下來,【擼碼--運行--看效果】一條龍服務。點贊手勢准備好,我怕看完我接下來的操作,你們沉浸在其中,無法自拔而忘記點贊了。
特別注意 setTimeout 函數,如果不使用該方法進行延遲調用,在 IOS系統 中100%無法調起掃一掃,應該算是微信小程序的BUG,至於延遲多少,就自行測試了,這邊延遲 500ms 。
2.1、掃碼成功的回調處理:重定向到頁面中,並且攜帶miniType參數和result參數
2.2、掃碼失敗的回調處理:直接重定向到頁面,並且不帶任何參數
㈨ android java怎麼調用webview中js方法
Android平台上使用js調用java方法,主要是通過webview控制項提供的 webview.addJavascriptInterface(new Person(this), "per"); 這個方法將java對象注入到js中,然後可以在js中通過調用該java對象的方法來實現回調,如下代碼:
1.html文件,demo.html<html> <head> <script type="text/javascript" > function updateHtml(type,type2){ document.getElementById("content").innerHTML = "彈出對話框,測試"+type+type2; alert("dialog"); } </script> </head> <body> 這是一個js與android的例子 <a onClick="window.ceshi.startFunction()" href="">彈出對話框</a> 調用對象方法 <a onClick="per.print()" href="">調用對象方法</a> <span id="content"></span> </body> </html>