Android 自定義WebView彈窗及屏蔽彈窗

額,還是那個WebView的問題,內核已換成騰訊X5內核,所以接下來的內容會有一些X5內核的方法。但我們的H5是不能改的,還是只有委屈我們自己。先看看H5自帶的彈窗

這樣子的彈窗在不同的手機上呈現的可能是不同的效果,效果不統一,你家產品經理看了會高興嗎?哈哈哈。 其中,onJsPrompt彈出的內容在我們現在的項目上是無意義的。這個是之前AngularJS和Cordava項目。于是乎,對于onJsPrompt彈窗,我的做法是:

     @Overridepublic boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {//在defaultValue或message中,會返回一個url,我們項目中的下載的文件都是File路徑下//如果不是File文件,則直接返回true來屏蔽彈窗。if (!defaultValue.contains("File") && !message.contains("File")) {result.confirm();return true;}result.confirm();webView.loadUrl(message);return true;}
復制代碼

result.confirm();就是默認點確定,同理result.cancel();是取消操作

這樣就可以輕松地屏蔽gay_init:2這樣的無意義彈窗了,具體的可以根據message或者defaultValue的值來判斷是否執行其他操作。 接下來是onJsAlert和onJsConfirm類型的,這樣的彈窗我可是一眼就辨別出來了,因為從按鍵個數基本確定,onJsAlert只有一個,onJsConfirm嘛,肯定是有一個取消一個確定了。如果不能確定類型,可以分別復寫幾個方法,打上斷點或者Log一下,也可以找到。

既然他倆就一個按鍵的區別,那就只貼onJsConfirm的了。樣式是仿照IOS的效果來的,background自定義的,需要的留言,我只貼主要的,畢竟本文主要是講WebView的。

xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:id="@+id/title"android:layout_width="match_parent"android:layout_height="wrap_content" /><TextViewandroid:id="@+id/content"android:layout_width="match_parent"android:layout_height="wrap_content" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><Buttonandroid:id="@+id/certain"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="確定" /><Buttonandroid:id="@+id/cancel"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/x1"android:layout_weight="1"android:text="取消"/></LinearLayout>
</LinearLayout>
復制代碼

類里面:

    private AlertDialog confirmDialog;private boolean isCertain;@Overridepublic boolean onJsConfirm(WebView webView, String url, String message, final JsResult result) {confirmDialog = new AlertDialog.Builder(getContext(), R.style.alert_dialog_style).create();View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.window_user, null);TextView title = (TextView) view.findViewById(R.id.title);TextView content = (TextView) view.findViewById(R.id.content);Button cancel = (Button) view.findViewById(R.id.cancel);Button certain = (Button) view.findViewById(R.id.certain);title.setText("操作提示");//直接將返回的message信息設置到布局中content.setText("" + message);confirmDialog.setView(view);cancel.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {confirmDialog.dismiss();isCertain = false;}});certain.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {confirmDialog.dismiss();isCertain = true;}});confirmDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {@Overridepublic void onDismiss(DialogInterface dialog) {//根據isCertain來判斷用戶希望執行的是確定還是取消操作if (isCertain) {result.confirm();} else {result.cancel();}}});confirmDialog.show();WindowManager.LayoutParams params = confirmDialog.getWindow().getAttributes();params.width = (int) (ScreenUtils.getScreenWidth() * 0.9);params.height = LinearLayout.LayoutParams.WRAP_CONTENT;confirmDialog.getWindow().setAttributes(params);return true;}
復制代碼

效果嘛,就這樣啦。

一直以來,WebView對我來說是一個很難控制但是又不得不用的重要組件。經歷了很多坑,包括谷歌大佬埋下的。不管怎么說,我們在遇到問題的時候,要不畏艱難,迎難而上。沒有問題,制造問題,也要上。不要慫,就是干!共勉。

轉載于:https://juejin.im/post/5a313cdc51882575cb741bd5

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256019.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256019.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256019.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【圖像處理】——Python實現two_pass方法來進行連通域的提取

目錄 一、相關知識 1、two_pass算法思想 2、并查集算法 二、自定義的two_pass算法

C++ 多線程使用future傳遞異常

如果 std::async 調用的函數拋出異常&#xff0c;那么這個異常會被存儲在值的位置&#xff0c;同時 future 變為 ready ,如果調用 get() 會重新拋出存儲的異常。 Note: 標準并沒有指定原來的異常對象是被重新拋出或者拷貝后拋出&#xff0c;不同的編譯器會做不同的選擇。 對于 …

期貨黃金與現貨黃金比較

現貨黃金與期貨黃金是目前市場上最熱門的黃金投資方式&#xff0c;與國內任何的金融投資品相比&#xff0c;都具有一定的優勢。 其實金投網小編覺得現貨黃金與期貨黃金最主要的不同點是這個&#xff1a;期貨黃金做的是國內市場&#xff0c;同股票市場一樣&#xff0c;里面有莊家…

DNS域傳送漏洞

0x00 相關背景介紹 Dns是整個互聯網公司業務的基礎&#xff0c;目前越來越多的互聯網公司開始自己搭建DNS服務器做解析服務&#xff0c;同時由于DNS服務是基礎性服務非常重要&#xff0c;因此很多公司會對DNS服務器進行主備配置而DNS主備之間的數據同步就會用到dns域傳送&#…

封裝之--通過類中公有方法訪問私有成員變量

如何在ClassB中訪問ClassA的私有成員變量&#xff1f;&#xff08;典型的封裝案例&#xff09; 通過在ClassA中定義公有的成員方法&#xff0c;然后&#xff0c;在ClassB中通過ClassA的對象調用ClassA中的公有方法&#xff0c;來訪問ClassA中的私有成員變量。 轉載于:https://w…

匹配物鏡放大倍數與相機像元尺寸

通常來說&#xff0c;相機內部的CCD或者CMOS傳感器上都有感光陣列&#xff0c;由一個一個的感光元件構成&#xff0c;每一個感光元件負責完成光電轉換的過程。簡單理解&#xff0c;一個感光元件可以認為就是一個像素(pixel)或像元(pel)。像元具有一定尺寸&#xff0c;如果像的尺…

2016/11/10 kettle概述

ETL(Extract-Transform-Load&#xff0c;即抽取&#xff0c;轉換&#xff0c;加載)&#xff0c;數據倉庫技術&#xff0c;是用來處理將數據從來源&#xff08;以前做的項目&#xff09;經過抽取&#xff0c;轉換&#xff0c;加載到達目的端&#xff08;正在做的項目&#xff09…

【深度學習】——非極大值抑制(nms/soft-nms)

目錄 一、相關概念 1、iou 1&#xff09;理論計算 2&#xff09;Python代碼&#xff08;代碼參考yolov3模型util.py文件&#xff09; 2、nms 1)基本思路 2&#xff09;標準nms和soft-nms 3&#xff09;Python代碼實現&#xff08;yolov3中util.py文件&#xff0c;增加了…

移動服務安全現狀分析!

2019獨角獸企業重金招聘Python工程師標準>>> 由于Android開源的環境&#xff0c;導致Android的整體環境都存在很多不安全的因素&#xff0c;同時用戶在移動APP客戶端的便捷應用&#xff0c;也給用戶帶來了巨大的安全隱患。未經過移動服務安全加固的APP存在被靜態反編…

封裝不同類模板的隨機數生成器

最近準備刷題&#xff0c;打算簡單封裝下隨機數生成器&#xff0c;方便產生測試數據。C11的STL提供了很多分布類型&#xff0c;我比較常用的是均勻分布&#xff0c;均勻分布的值有兩種類型&#xff0c;一類是整數&#xff0c;另一類是浮點數&#xff0c;STL根據值的類型定義了兩…

Log4j詳細設置說明

1. 動態的改變記錄級別和策略&#xff0c;即修改log4j.properties,不需要重啟Web應用&#xff0c;這需要在web.xml中設置一下。2. 把log文件定在 /WEB-INF/logs/ 而不需要寫絕對路徑。3. 可以把log4j.properties和其他properties一起放在/WEB-INF/ &#xff0c;而不是Class-Pat…

【機器學習】——卷積神經網絡(Keras)修改學習率(定值+自適應)

目錄 1、直接獲取現有模型的學習率 2、打印顯示學習率 3、調整學習率 1&#xff09;1.LearningRateScheduler 2&#xff09;ReduceLROnPlateau 利用tensorflow的Keras模塊我們可以建立我們自己定義的卷積神經網絡模型&#xff0c;但是一般不會觸碰到學習率這個問題&#x…

使用Docker構建你的第一個服務

1. 感受一下Docker的便捷 項目源碼 https://github.com/MoonShining/dockernize-grape-helloworld clone下來以后運行,cd到項目目錄下&#xff0c;運行 docker build -t api-sample . docker run -p 8080:8080 api-sample:latest 復制代碼就可以訪問localhost:8080看到效果了. …

MyEclipse連接MySQL

在官網http://www.mysql.com/downloads/下載數據庫連接驅動 本文中使用驅動版本為mysql-connector-java-5.1.40 一、創建一個java測試項目MySQLConnectorsTest 在項目下穿件一個lib文件夾用來存放MySQL驅動包。 右鍵驅動包build path進行add添加操作&#xff0c;打開Referenced…

在Windows系統中配置Google AddressSanitizer

Google AddressSanitizer簡介 AddressSanitizer (ASan) 是 C 和 C 的內存錯誤檢測軟件&#xff0c;它可以檢測&#xff1a; 釋放指針后繼續使用堆緩沖區溢出棧緩沖區溢出全局緩沖區溢出返回后繼續使用在范圍之外繼續使用初始化順序的bug內存泄漏 在 Windows 系統中&#xff…

【劍指offer】——求出一個正整數的質數因子(Python)

目錄 一、題目描述 二、思路 1、短除法 2、平方根法 一、題目描述 功能:輸入一個正整數&#xff0c;按照從小到大的順序輸出它的所有質因子&#xff08;重復的也要列舉&#xff09;&#xff08;如180的質因子為2 2 3 3 5 &#xff09; 最后一個數后面也要有空格 輸入描述…

Python字符串筆錄

python字符串操作實方法&#xff0c;包括了幾乎所有常用的python字符串操作&#xff0c;如字符串的替換、刪除、截取、復制、連接、比較、查找、分割等 1、去空格及特殊符號 >>> s 123 >>> s.strip() # 去除所有空格123 >>> s1 123 >>&…

第九周進度條

第六周學習進度條 星期一 星期二 星期三 星期四 星期五 星期六 星期日 所花時間 &#xff08;包括上課&#xff09; 無 上午8:00-9:50 無 無 下午4:00-5:00 下午3&#xff1a;00-5&#xff1a;30 代碼量&#xff08;行&#xff09; 0行 260行 0行 0行 0行 0…

C++ STL實現的優先隊列( priority_queue )

本文參考的源碼版本&#xff1a;gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)。 priority_queue 本質是容器適配器&#xff0c;它對內部容器的元素有自己的管理方式&#xff0c;而 priority_queue 實際維護的是一個二叉堆。STL中 priority_queue 的…