2016 - 2024

感恩一路有你

实现从服务器请求下发的JavaScript字符串的方法代码

浏览量:2906 时间:2024-08-12 14:19:05 作者:采采

```objective-c

- (void)requestJavaScriptFromServer {

// 发送网络请求获取到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];

// 将从服务器请求下来的JavaScript字符串执行

[self evaluateJavaScript:javascriptString];

}

}];

[task resume];

}

- (void)evaluateJavaScript:(NSString *)javascriptString {

// 执行修复方法

// ...

}

```

实现下载完成后同步的方式执行修复的方法代码

```objective-c

- (void)downloadAndExecuteJavaScript {

// 下载JavaScript文件

NSURL *url [NSURL URLWithString:@""];

NSData *data [NSData dataWithContentsOfURL:url];

NSString *javascriptString [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

// 执行修复方法

[self evaluateJavaScript:javascriptString];

}

- (void)evaluateJavaScript:(NSString *)javascriptString {

// 执行修复方法

// ...

}

```

两步合到一起的方法代码

```objective-c

- (void)requestAndExecuteJavaScript {

// 发送网络请求获取到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];

// 执行修复方法

[self evaluateJavaScript:javascriptString];

}

}];

[task resume];

}

- (void)evaluateJavaScript:(NSString *)javascriptString {

// 执行修复方法

// ...

}

```

当ViewController里有一个这样的调用参数为nil时会导致崩溃方法代码

```objective-c

- (void)someMethodWithParameter:(id)parameter {

// 当parameter为nil时,会导致崩溃

// ...

}

```

从服务器下发这段脚本来修复这个闪退替换join:b:方法代码如下

```javascript

function() {

// 修复闪退的join方法

return ().split(',').join(arguments[0]);

};

```

App重新启动的时候--》会以同步的方式加载到该脚本--》并执行修复的方法代码如下

```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];

// 执行修复方法

[self evaluateJavaScript:javascriptString];

return YES;

}

- (void)evaluateJavaScript:(NSString *)javascriptString {

// 执行修复方法

// ...

}

```

新App内修复闪退问题的技术实现方法

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。