IOS JavaScriptCore 跳轉失去物件和一些BUG總結
引: 以前做專案的時候也做過webview和js互動,以為會手到擒來。結果WTFK、兩天的時間來研究它。主要遇到了一個BUG,下面簡單的說一下。
下面一段程式碼注入時機的選擇,這是一個很重要的問題。
context = [_webViewvalueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
//列印異常
context.exceptionHandler = ^(JSContext *context1, JSValue *exceptionValue) {
context1.
NSLog(@"%@", exceptionValue);
};
context[@"object"] =self; //以JSExport協議關聯 native的方法
① 在webViewDidStartLoad注入
現象: 在UIWebView的webViewDidStartLoad階段建立JSContext並暴露oc端的方法,在載入一級頁面時js正常呼叫oc的方法,而跳轉到二級頁面中卻無法執行oc的方法;而在webViewDidStartLoad階段由於並未載入完js檔案, 因此js層定義的函式在oc端無法執行。
原因:我跟蹤了jsContext二級頁面根本沒有建立,這時候的jsContext還是第一次載入頁面的那個物件。所以JS無法獲取物件執行oc方法。
②在webVIewDidFinishLoad建立
現象:由於載入js階段在webVIewDidFinishLoad階段之前,因此一級頁面js無法呼叫oc方法,但是二級頁面同理也是如此
原因: 如果JS的呼叫OC的方法,也就是在webview載入之前那就掉不起來。因為之前JS無法獲得OC物件
解決辦法:
1., 可以通過在js設定setTimeout來讓任務放到執行佇列的末端,先執行oc層的webVIewDidFinishLoad方法,待任務完成後再執行js中的非同步程式碼,通過這種方式可以完成js呼叫oc方法;
2.用一個私有API,監聽何時建立好jscontext,在這時候注入。這個方法很好,只是蘋果不允許上架。哎
相關推薦
IOS JavaScriptCore 跳轉失去物件和一些BUG總結
引: 以前做專案的時候也做過webview和js互動,以為會手到擒來。結果WTFK、兩天的時間來研究它。主要遇到了一個BUG,下面簡單的說一下。 下面一段程式碼注入時機的選擇,這是一個很重要的問
iOS介面跳轉的一些優化方案
App應用程式開發, 介面跳轉是基礎中的基礎, 幾乎沒有一個App是用不到介面跳轉的, 那麼怎麼樣去書寫介面跳轉程式碼才是比較合理的呢? 大家可能在想跳轉無非就2種方式, 能有什麼內容? 其實並不是這樣子的, 對於研發老手來說, 大型應用幾乎都是利用URLSc
iOS開發app間相互跳轉以及appStore和系統設定
1.app間相互跳轉 (1)兩個專案,這裡我們暫且說專案A和專案B。 (2)專案A跳轉到專案B。 步驟1:開啟專案B工程 找到info 目錄下的URL Types,點選+號進行新增,然後設定URL schemes。 (3)將專案B的URL schemes 記錄下來,以便在專
iOS ViewController跳轉和返回
檢視控制器 iOS和android的檢視控制器的邏輯類似 應用程式用一個棧來管理檢視 跳轉到下一個檢視 let nextView = CameraViewControll() self
iOS應用跳轉(包括iPhone原有應用跳轉和第三方應用跳轉)
iOS應用間跳轉簡介 在開發的過程中,我們經常會遇到需要從一個應用程式跳轉到另一個應用程式的場景。這就需要我們掌握iOS應用程式之間的相互跳轉知識。 應用間跳轉應用場景 使用第三方使用者登入,跳轉到需授權的App。如QQ登入,微信登入等
iOS介面跳轉過程中導航欄和tabBar的隱藏與顯示
一、當A頁面要push到B頁面,需要將B頁面的導航欄隱藏時,我們只需要在A頁面中重寫以下兩個方法: override func viewWillAppear(animated: Bool) {
IOS 應用跳轉 (IOS9白名單)
tom super created reat 獲取 import 字符 ges ict 跳轉到指定app的實現 IOS中應用的跳轉是通過URL實現的,因此在實現應用跳轉之前我們要設置一下對應的URL。 圖一(尋找配置軟件的URL) 圖二(具體配置選項) 註意: 如果IO
ios NavigationViewController跳轉以及返回傳值
spl art com osi nts isp lai -i rgb (一)使用NavigationViewController進行頁面跳轉時,應該使用pushViewController方法來跳轉至下一頁面。這種話。下一頁面相同在Navigatio
iOS 10跳轉到其他app
取消 and self LEDE har .com shared available else - (BOOL)jumpsToThirdAPP:(NSString *)urlStr{ if ([urlStr hasPrefix:@"mqq"] ||
iOS如何玩轉App推廣和統計?
想獲取APP安裝數量統計嗎? 想輕鬆獲取更多使用者數量嗎? 想有效保持使用者的活躍度嗎? 這裡我來帶你玩轉APP的推廣與統計,推薦使用的是專業、輕便的Shareinstall雲服務。 什麼是shareinstall: Shareinstall其實是一個APP的推
iOS 頁面跳轉效能優化
基礎知識 想在螢幕上顯示一個檢視,我們只需要簡單地實現以下程式碼,並執行Application到模擬器或真機即可。 圖1 -渲染服務程序 雖然看到的效果跟Application的程式碼是一一對應的,但檢視繪
分享最近對網站外鏈跳轉頁面程式碼的一些改善
很久之前在部落格分享了幾篇關於外鏈跳轉的程式碼或教程。如果沒看過的可以先了解下: 最近,有了一些靈感以及在其他部落格也吸收了一些相關經驗,就把現用的外鏈程式碼小改了下,感覺還不錯,現在分享下,喜歡的可以試試。 Ps:不喜歡囉嗦的朋友請直接從第五步開始看。 一、安全加固 首先,加入了在魚叔部落
HeapDumpOnOutOfMemoryError堆轉儲實踐和一些分析
程式碼1在迴圈中建立long[]例項時,上次迴圈建立的long[]例項沒有被引用,可以被垃圾回收掉,所以在引數Xmx40m下,程式碼1建立佔用32M記憶體的long[]還是可以正常執行的,試圖建立佔用64M記憶體的long[]才丟擲異常;程式碼2在迴圈中建立long[]例項時,上次迴圈建立的long[]例項還
JSP中頁面跳轉response.sendRedirect()和request.getRequestDispatcher()的區別
Java Web開發中,採用MVC模式的時候,在控制器完成模型的呼叫之後會選擇介面對使用者響應,用常有2種方式 1,通過response物件的sendRedirect方法重定向: response.
ios開發:跳轉到根檢視並跳轉到第一個tabbar第一個頁面
跳轉到根檢視並跳轉到第一個tabbar第一個頁面 // 直接跳轉到跟檢視 self.navigationController.tabBarController.hid
掃描二維碼自動識別手機系統(Android/IOS)跳轉不同頁面
移動網際網路發展迅速,各種APP的開發都太瘋狂了,一般稍大點兒的應用,都會準備多個版本,比如:iPhone版、iPad版、Android版,我們姑且稱之為:終端適配。 業務做的再大點兒的,APP還會考慮覆蓋到多個國家,比如:中文版、英文版、日文版、韓文版等,我們可稱之為
在沒有個人/公司網站的情況下,如何利用同一個二維碼自動識別手機系統(Android/IOS)跳轉不同下載頁面
一、使用場景 開發了一款App,包括iOS及Android版,到了推廣階段,準備生成二維碼讓使用者掃碼下載,那這個二維碼該怎麼生成?iOS及Andorid各自生成一個二維碼讓使用者區分下載?當然這種方式是可行的,但卻增加了使用者的使用成本!那是不是有一種方式可
jsp頁面跳轉請求轉發和請求重定向的區別
jsp實質上就是一個servlet,在完成多頁面跳轉的時候有倆種方式1.請求轉發2.請求重定向 用servlet來舉列子實現(現把三個Servlet在專案的web.xml中初始化和對映哦) 列子思路:寫好一個介面,裡面有請求轉發實現的servlet(圖中:ForwardServlet),和請
求助,iOS tableview 跳轉問題,單擊無法跳轉
程式碼 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ // NSString *rowString = [self.list ob
vue中的倒計時跳轉頁面問題和axios網路請求this作用域問題
一、前言 這兩個是在日常開發中碰到的問題,網上都能查得到答案,但是我怕自己會忘記,姑且記錄一下用作筆記吧。 二、vue倒計時跳轉問題 1、案例 比如我們在一次網路請求結束之後,如果返回結果是成功,則倒計時1.5秒跳轉頁面。 2、碰到的問