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]
JS監聽checkbox的選擇獲取取消事件代碼案列
事件 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).