gpt4 book ai didi

ios7 - 如果无法访问 UIWebView 的运行时,为什么要在 iOS7 中使用 JavaScriptCore?

转载 作者:行者123 更新时间:2023-12-03 21:08:19 26 4
gpt4 key购买 nike

这是对此博客的回应:

http://blog.bignerdranch.com/3784-javascriptcore-and-ios-7/

iOS 开发人员对 SO 的看法?

最佳答案

您可以从带有关键路径的 UIWebView 获取 JSContext:

UIWebView *webView = [[UIWebView alloc] init];
JSContext *ctx = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
ctx[@"document"][@"body"][@"style"][@"background"] = @"steelblue";

Apple 从来没有记录任何新的 JavaScriptCore API,所以我不确定这是否算作内部/未记录的 API。我有一个批准使用此方法的应用程序。

更新 : https://github.com/TomSwift/UIWebView-TS_JavaScriptContext 建议的另一种替代解决方案是在 NSObject 上创建一个类别并使用它来实现 WebKit 的文档 didCreateJavaScriptContext委托(delegate)回调。为了解释该实现,您可以调用 [NSObject contextForWebView:myWebView]获取 UIWebView 的 JSContext:
@implementation NSObject(JSContextTracker)

+ (NSMapTable *)JSContextTrackerMap {
static NSMapTable *contextTracker;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
contextTracker = [NSMapTable strongToWeakObjectsMapTable];
});
return contextTracker;
}

- (void)webView:(id)unused didCreateJavaScriptContext:(JSContext *)ctx forFrame:(id)alsoUnused {
NSAssert([ctx isKindOfClass:[JSContext class]], @"bad context");
if (!ctx)
return;
NSMapTable *map = [NSObject JSContextTrackerMap];
static long contexts = 0;
NSString *contextKey = [NSString stringWithFormat:@"jsctx_%@", @(contexts++)];
[map setObject:ctx forKey:contextKey];
ctx[@"JSContextTrackerMapKey"] = contextKey; // store the key to the map in the context itself
}

+ (JSContext *)contextForWebView:(UIWebView *)webView {
// this will trigger didCreateJavaScriptContext if it hasn't already been called
NSString *contextKey = [webView stringByEvaluatingJavaScriptFromString:@"JSContextTrackerMapKey"];
JSContext *ctx = [[NSObject JSContextTrackerMap] objectForKey:contextKey];
return ctx;
}

@end

关于ios7 - 如果无法访问 UIWebView 的运行时,为什么要在 iOS7 中使用 JavaScriptCore?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18920536/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com