在公司的專案當中,有一些透過Web JavaScript 操作 objc 程式碼的操作在升級為iOS 10 之後就突然不work 了,稍微找了一下發現,原本實作用於bridge 兩者的delegate method webView:shouldStartLoadWithRequest:navigationType: 所接收到的NSURLRequest當中的URL,在 iOS 10 以前的版本看起來會像是(其中忽略了URL encode):

xxxjs://{"functionname": "funcname" ...}

但在iOS 10 上卻變成了:

about:blank

稍微查了一下資料,其中不work 的原因在於,原本我們與Server team 溝通好的JavaScript bridge url 的格式並不符合規範,iOS 10 直接將這樣的URL 過濾掉,導致URL 變成了空白頁的URL,於是乎我請Server team 幫忙修改URL為:

xxxjs://doAction?request={"functionname": "funcname" ...}

如此一來,delegate method 就不會再把我們的URL 當作是不符合規範的URL 了!不過也因為修改了Bridge 的方式,相對應的程式碼也都做了修改,當中處理URL 的程式碼我大量使用NSURLComponents,省掉了一些用又髒又醜的方式在做字串處理的程式碼,有機會再分享一篇NSURLComponents的使用方式。