1. 程式人生 > >iOS UIWebView重寫或者監聽js Alter/Confirm/Prompt函式

iOS UIWebView重寫或者監聽js Alter/Confirm/Prompt函式

最近公司在開發web型的app,涉及許多互動,剛好,我遇到js中 的Alter/Confirm/Prompt三個彈框提示函式的坑,今天記錄解決的辦法下來,供大家使用。

1、在開發過程中,前端使用了他們自己的彈框框架,結果在iOS和Android端展示這樣子,多了http。

這裡寫圖片描述

2、為了解決這樣的問題,百度了許多,最終藉助百度上的資料和官方文件,試驗成功了。
3、其實不難解決這個問題,新建個UIWebView類別,在m檔案寫上如下程式碼,即可。

- (void)webView:(UIWebView *)sender runJavaScriptAlertPanelWithMessage:(NSString
*)message initiatedByFrame:(CGRect *)frame { UIAlertView* customAlert = [[UIAlertView alloc] initWithTitle:@"溫馨提示" message:message delegate:nil cancelButtonTitle:@"確定" otherButtonTitles:nil]; [customAlert show]; } static BOOL diagStat = NO; static NSInteger bIdx = -1; - (BOOL)webView:(UIWebView
*)sender runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(id)frame{ diagStat = NO; bIdx = -1; UIAlertView *confirmDiag = [[UIAlertView alloc] initWithTitle:@"溫馨提示" message:message delegate:self
cancelButtonTitle:@"取消" otherButtonTitles:@"確定", nil]; [confirmDiag show]; while (bIdx==-1) { //[NSThread sleepForTimeInterval:0.2]; [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1f]]; } if (bIdx == 0){//取消; diagStat = NO; } else if (bIdx == 1) {//確定; diagStat = YES; } return diagStat; } - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ bIdx = buttonIndex; } - (NSString *) webView:(UIWebView *)view runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)text initiatedByFrame:(id)frame{ diagStat = NO; bIdx = -1; UIAlertView *confirmDiag = [[UIAlertView alloc] initWithTitle:@"溫馨提示" message:prompt delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"確定", nil]; [confirmDiag setAlertViewStyle:UIAlertViewStylePlainTextInput]; UITextField *textField = [confirmDiag textFieldAtIndex:0]; textField.placeholder = @"請輸入資訊"; textField.keyboardType = UIKeyboardTypeDefault; [confirmDiag show]; while (bIdx==-1) { //[NSThread sleepForTimeInterval:0.2]; [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1f]]; } if (bIdx == 0){//取消; diagStat = NO; } else if (bIdx == 1) {//確定; diagStat = YES; } return textField.text; }

效果如下:

這裡寫圖片描述

有用,頂下

相關推薦

iOS UIWebView重寫或者js Alter/Confirm/Prompt函式

最近公司在開發web型的app,涉及許多互動,剛好,我遇到js中 的Alter/Confirm/Prompt三個彈框提示函式的坑,今天記錄解決的辦法下來,供大家使用。 1、在開發過程中,前端使用了他們自己的彈框框架,結果在iOS和Android端展示這樣子,多

ios avplayer播放完畢

//播放監聽,可以監聽到播放完畢,每秒處發一次,從播放後的第一秒觸發,不是一播放就出發 WeakObj(self) WeakObj(_voicePlayer) self.listenNer = [_voicePlayer addPeriodicTime

iOS 在Tableview中cell中屬性值改變,UI也隨之改變

前言:要實現如題的功能,有好幾種方法 1、 NSNotification通知 2、Delegate委託 3、修改當前操作的cell,修改該model中值,然後替換陣列的中,然後再重新整理當前的ce

iOS】KVO方式陣列的變化動態重新整理tableView

寫作本文來由:   iOS預設不支援對陣列的KVO,因為普通方式監聽的物件的地址的變化,而陣列地址不變,而是裡面的值發生了改變 整個過程需要三個步驟 (與普通監聽一致) /*     *  第一步建立觀察者及觀察的物件     *  第二步 處理key的變化(根據key的

iOS攔截系統KVO,防止多次刪除和新增!!!Demo

https://blog.csdn.net/jq2530469200/article/details/52484646最近專案中處理kvo 的時候,遇到一個問題:當我操作的時候,會發現kvo 釋放的時候,會崩潰, 崩潰日誌如下:/*Terminating app due to

iOS 導航欄透明度 導航欄返回進度

如我在傳送門:iOS導航欄切換介面時隱藏和顯示中所說,現在很多App的個人中心模組都是不保留導航欄的,會直接使導航欄透明,比如做的很好的QQ個人資訊介面: 為什麼說QQ做的很好呢?既然有透明的導航欄也有不透明的導航欄,那一定會在介面切換之間存在一個過渡的

外貿建站之導航欄NAV菜單JS處理代碼

string ner manually avi att .get can Once html 外貿建站之導航欄NAV菜單監聽JS處理代碼 1 var persistclose=1 //set to 0 or 1. 1 means once the bar is

不會吧,這也行?iOS後臺鎖屏搖一搖

[toc] # 背景介紹 一般情況下,出於省電、許可權、合理性等因素考慮,給人的感覺是很多奇怪的需求安卓可以實現,但是iOS就無法實現!今天要介紹的需求也有這種感覺,就是“**當 APP 處於後臺或鎖屏狀態時,依舊可以監聽到搖一搖**,進而觸發某些功能,比如:語音播報”。 在產品經理提出此需求的一瞬間,

如何設定WebView支援js的Alert,Confirm,Prompt函式的彈出提示框.

預設情況下,Android WebView是不支援js的Alert(),Confirm(),Prompt()函式的彈出提示框的.即使設定了setJavaScriptEnabled(true);也是沒用的.那麼,如何才能讓WebView可以支援js的這3個函式呢.可以通過設定

js ios手機鍵盤彈起和收起的事件

document.body.addEventListener('focusin', () => { //軟鍵盤彈起事件 console.log("鍵盤彈起") }) document.body.addEventListener('focusout', () => { //軟

js瀏覽器重新整理或者關閉 window.onbeforeunload

js監聽瀏覽器重新整理或者關閉 需要jquery.js的支援 <script> window.onbeforeunload = function() { return "您確

JS 事件綁定、事件、事件委托詳細介紹

兼容性 log 查看 and == 常用 提高 監聽 live 事件綁定 要想讓 JavaScript 對用戶的操作作出響應,首先要對 DOM 元素綁定事件處理函數。所謂事件處理函數,就是處理用戶操作的函數,不同的操作對應不同的名稱。 在JavaScript中,有三種常用的

js事件綁定/

eve dev func add code 不同 ndb mouse 匿名 事件綁定/監聽的方法 1.直接綁定 顧名思義,直接在DOM元素上綁定onclick、onmouseover、onmouseout、onmousedown、onmouseup、ondblclick

JS中的事件與事件流

pan 交互 ack 其他 獲得 發生 listen 監聽器 pre 事件監聽:   使用監聽器(eventListener)來預定事件,在傳統軟件工程中稱成為觀察者模式   執行某種操作時(特定的交互瞬間),會產生對象,對象會沿事件流的方向傳播。 事件流:   事件流有

js對手機軟鍵盤的

方法 如果 監聽 focus 事件代理 對手 http 移動端 cti js還沒有辦法對手機軟鍵盤直接進行監聽的,但是可以有其他角度來判斷軟鍵盤是否彈起。比如輸入框是否獲取焦點等。focusin和focusout支持冒泡,對應focus和blur, 使用focusin和fo

js 實時input中值變化

對象 不同 round 字符 實時 char div har 但是 摘自:http://blog.csdn.net/spy19881201/article/details/25537225 示例: <!DOCTYPE html> <html>

Angular.js中使用$watch模型變化

數組 r.js imac all 註銷 表達式 而不是 group equal $watch簡單使用 $watch是一個scope函數,用於監聽模型變化,當你的模型部分發生變化時它會通知你。 $watch(watchExpression, listener, obj

ios開發之--鍵盤的

efault key nil self. transform blog mar form owa 監聽鍵盤的彈出,讓整個頁面向上移動,比較簡單,僅做記錄使用: 代碼如下: // 監聽鍵盤 [[NSNotificationCenter defaultCenter]

JScheckbox的選擇獲取取消事件代碼案列

事件 onclick att 選中 types bsp put color type function OncheckBox(index){ if ($(index).attr("checked") == "checked") { alert($(ind

js input變化

chang rop for dds prop class brush input pre $(document).on(‘input propertychange‘, ‘#addShop .form-control‘, function() {   if($(this).