實現(xiàn)從服務(wù)器請求下發(fā)的JavaScript字符串的方法代碼
```objective-c- (void)requestJavaScriptFromServer { // 發(fā)送網(wǎng)絡(luò)請求獲取到JavaScript字符串 NSURL *url [NSU
```objective-c
- (void)requestJavaScriptFromServer {
// 發(fā)送網(wǎng)絡(luò)請求獲取到JavaScript字符串
NSURL *url [NSURL URLWithString:@""];
NSURLRequest *request [NSURLRequest requestWithURL:url];
NSURLSessionDataTask *task [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error nil data ! nil) {
NSString *javascriptString [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// 將從服務(wù)器請求下來的JavaScript字符串執(zhí)行
[self evaluateJavaScript:javascriptString];
}
}];
[task resume];
}
- (void)evaluateJavaScript:(NSString *)javascriptString {
// 執(zhí)行修復(fù)方法
// ...
}
```
實現(xiàn)下載完成后同步的方式執(zhí)行修復(fù)的方法代碼
```objective-c
- (void)downloadAndExecuteJavaScript {
// 下載JavaScript文件
NSURL *url [NSURL URLWithString:@""];
NSData *data [NSData dataWithContentsOfURL:url];
NSString *javascriptString [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// 執(zhí)行修復(fù)方法
[self evaluateJavaScript:javascriptString];
}
- (void)evaluateJavaScript:(NSString *)javascriptString {
// 執(zhí)行修復(fù)方法
// ...
}
```
兩步合到一起的方法代碼
```objective-c
- (void)requestAndExecuteJavaScript {
// 發(fā)送網(wǎng)絡(luò)請求獲取到JavaScript字符串
NSURL *url [NSURL URLWithString:@""];
NSURLRequest *request [NSURLRequest requestWithURL:url];
NSURLSessionDataTask *task [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error nil data ! nil) {
NSString *javascriptString [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// 執(zhí)行修復(fù)方法
[self evaluateJavaScript:javascriptString];
}
}];
[task resume];
}
- (void)evaluateJavaScript:(NSString *)javascriptString {
// 執(zhí)行修復(fù)方法
// ...
}
```
當(dāng)ViewController里有一個這樣的調(diào)用參數(shù)為nil時會導(dǎo)致崩潰方法代碼
```objective-c
- (void)someMethodWithParameter:(id)parameter {
// 當(dāng)parameter為nil時,會導(dǎo)致崩潰
// ...
}
```
從服務(wù)器下發(fā)這段腳本來修復(fù)這個閃退替換join:b:方法代碼如下
```javascript
function() {
// 修復(fù)閃退的join方法
return ().split(',').join(arguments[0]);
};
```
App重新啟動的時候--》會以同步的方式加載到該腳本--》并執(zhí)行修復(fù)的方法代碼如下
```objective-c
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 加載本地的JavaScript文件
NSURL *jsURL [[NSBundle mainBundle] URLForResource:@"jsPatch" withExtension:@"js"];
NSString *javascriptString [[NSString alloc] initWithContentsOfURL:jsURL encoding:NSUTF8StringEncoding error:nil];
// 執(zhí)行修復(fù)方法
[self evaluateJavaScript:javascriptString];
return YES;
}
- (void)evaluateJavaScript:(NSString *)javascriptString {
// 執(zhí)行修復(fù)方法
// ...
}
```
新App內(nèi)修復(fù)閃退問題的技術(shù)實現(xiàn)方法