问题描述
我正在尝试从NSURLSession类(群集)的挂钩方法中执行JavaScript,该方法返回LocalDataTask。出于某种原因,我的iOS调整导致应用程序在使用Theos调用我钩住的方法(-[NSURLSession dataTaskWithRequest:])时崩溃。
我不知道为什么会这样,因为我没有收到任何有用的错误消息。
之所以要从UIWebView中获取jscontext,是因为我想利用WebKit中的所有JavaScript对象(例如XMLHttpRequest)。
#import <WebKit/WebKit.h>
#import <JavaScriptCore/JavaScriptCore.h>
@interface myjscontext : NSObject
+(jscontext *)sharedContext;
@end
@implementation myjscontext
+(jscontext *)sharedContext {
static jscontext * jsCtxt = nil;
static UIWebView * webView = nil;
static dispatch_once_t oncetoken;
if (!webView) {
dispatch_once(&oncetoken,^{
webView = [[%c(UIWebView) alloc] init];
jsCtxt = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
});
}
return jsCtxt;
}
@end
%hook SpringBoard
-(void)applicationDidFinishLaunching:(id)arg1 {
%orig;
NSLog(@"%@",[myjscontext sharedContext]); // prints the pointer as expected
NSLog(@"%@",[[myjscontext sharedContext] evaluateScript:@"'js test result'.toString()"]); // successfully executes JavaScript as expected
}
%end
%hook NSURLSession
-(id)dataTaskWithRequest:(id)arg1 {
NSLog(@"%@",[myjscontext sharedContext]); // this causes an error,I've tried calling this from the main and global thread which didn't work either
return %orig;
}
%end
编辑:我无法在此处发布所有日志消息,因为该站点认为它“看起来像垃圾邮件” ...
证明已创建jscontext实例并起作用:
Aug 17 07:04:55 SpringBoard(TestTweak.dylib)[7402] <Notice>: js test result
我只能看到以下错误消息:
Aug 17 07:07:00 MobileSafari(SafariServices)[7464] <Error>: displaying webpage loading error to user: Error Domain=WebKitErrorDomain Code=300,networkTaskDescription: (null).
Aug 17 07:07:00 MobileSafari(WebKit)[7464] <Error>: 0x104fcbc00 - ProcessAssertion::processAssertionWasInvalidated()
Aug 17 07:16:41 runningboardd(RunningBoard)[39] <Notice>: [xpcservice<com.apple.WebKit.Networking>:7504] Error 45 setting darwin role to NonUserInteractive: Operation not supported,falling back to setting priority
Aug 17 07:16:41 com.apple.WebKit.Networking(CFNetwork)[7504] <Notice>: Faulting in NShttpcookiestorage singleton
Aug 17 07:16:41 com.apple.WebKit.Networking(CFNetwork)[7504] <Notice>: Faulting in CFhttpcookiestorage singleton
这些错误消息都没有明确告诉我出了什么问题。
为什么从属于SpringBoard的钩子方法调用此方法能正常工作,但从属于NSURLSession的钩子方法调用时却无效?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)