相关疑难解决方法(0)

UIWebView JavaScript失去对iOS JSContext名称空间(对象)的引用

我一直在研究一个概念验证应用程序,它利用WebKit JavaScriptCore框架利用Objective C(iOS 7)和JavaScript之间的双向通信.我终于能够按预期工作了,但是遇到了UIWebView失去对我通过JSContext创建的iOS对象的引用的情况.

该应用程序有点复杂,以下是基础知识:

  • 我正在iOS设备上运行Web服务器(CocoaHTTPServer)
  • UIWebView最初加载远程URL,稍后重定向回localhost作为应用程序流的一部分(想想OAuth)
  • 应用程序托管的HTML页面(在localhost上)具有应该与我的iOS代码通信的JavaScript

这是iOS方面,我的ViewController .h:

#import <UIKit/UIKit.h>
#import <JavaScriptCore/JavaScriptCore.h>

// These methods will be exposed to JS
@protocol DemoJSExports <JSExport>
-(void)jsLog:(NSString*)msg;
@end

@interface Demo : UIViewController <UserInfoJSExports, UIWebViewDelegate>
@property (nonatomic, readwrite, strong) JSContext *js;
@property (strong, nonatomic) IBOutlet UIWebView *webView;
@end
Run Code Online (Sandbox Code Playgroud)

以及ViewController的相关部分.m:

-(void)viewDidLoad {
    [super viewDidLoad];

    // Retrieve and initialize our JS context
    NSLog(@"Initializing JavaScript context");
    self.js = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

    // Provide an object for JS to access our …
Run Code Online (Sandbox Code Playgroud)

javascript objective-c uiwebview ios javascriptcore

18
推荐指数
1
解决办法
2万
查看次数

标签 统计

ios ×1

javascript ×1

javascriptcore ×1

objective-c ×1

uiwebview ×1