mPaaS 建議所有的 JSAPI 訪問都需要添加存取控制,目前可以通過設定 Plugin 的方式添加存取控制。
設定自訂許可權控制 Plugin。
自訂 Plugin,監聽 JSAPI 調用的事件,進行攔截處理。
在 Plugin 中攔截到事件後,擷取當前頁面的 URL,建議根據 host、scheme 進行字串匹配校正。
@interface MPPlugin4WebView : NBPluginBase @end @implementation MPPlugin4WebView - (void)pluginDidLoad { self.scope = kPSDScope_Scene; // -- 攔截調用的jsapi資訊 [self.target addEventListener:kEvent_Invocation_Event_Start withListener:self useCapture:NO]; [self.target addEventListener:kEvent_Invocation_Invoke withListener:self useCapture:NO]; [super pluginDidLoad]; } - (void)handleEvent:(PSDEvent *)event { [super handleEvent:event]; if([kEvent_Invocation_Event_Start isEqualToString:event.eventType] || [kEvent_Invocation_Invoke isEqualToString:event.eventType]){ PSDInvocationEvent *invocationEvent = (PSDInvocationEvent *)event; NSString *apiName = invocationEvent.invocationName; NSDictionary *data = invocationEvent.invocationData; // 擷取到當前頁面的url,根據scheme和host進行字串匹配校正 NSURL *url = event.context.currentViewController.url; if (![url.host isEqualToString:@"xxx"] || ![url.scheme isEqualToString:@"xxx"]) { [event preventDefault]; [event stopPropagation]; return; } } } - (int)priority { return PSDPluginPriority_High+1; }
重要URL 要進行精準匹配,至少要匹配到 URI 類的 scheme 和 host 資訊,慎用或不用正則匹配,嚴格避免使用 contains、startsWith、endsWith、indexOf 等不精準函數。
註冊 Plugin。
在 mPaaS 容器初始化時,指定自訂 Plugin 的路徑。
在自訂 Plugin 的 bundle 的 plist 檔案中,註冊上一步的 Plugin。詳情請參考 註冊 Plugin。