之前一直沒有使用過JSContext疙渣,昨天遇到相關(guān)問題就試了一下看疗。
- 加載本地HTML文件
NSString *mainBundle = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:mainBundle];
NSString *htmlPath = [NSString stringWithFormat:@"%@/test.html", mainBundle];
NSString *htmlString = [NSString stringWithContentsOfFile:htmlPath
encoding:NSUTF8StringEncoding
error:nil];
[self.webview loadHTMLString:htmlString baseURL:baseURL];
self.webview.delegate = self;`
- JSContext調(diào)用
self.context = [self.webview valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
[self.context evaluateScript: @"var sayHello;$(document).ready(function() { sayHello=function(name){ return 'Hello, ' + name; }});"];
JSValue *function = self.context[@"sayHello"];
JSValue* result = [function callWithArguments:@[@"world"]];
NSString *re = [result toString];
NSLog(@"%@", re);`
-
輸出結(jié)果
- 遇到問題:
- 無法加載本地 JS 文件曹锨,搜索了一下创南,應(yīng)該使用http://stackoverflow.com/questions/17252073/ios-open-uiwebview-with-local-javascript-files 里提到的方法浓恶。
- demo 中發(fā)現(xiàn)只能通過 html 中加載 jQuery 的方式成功調(diào)用 sayHello 方法莺债。嘗試使用http://stackoverflow.com/questions/23397658/how-to-include-a-external-library-in-javascriptcore 里的方法,成功加載jQuery文件到千,但是 sayHello 方法無法調(diào)用成功昌渤。
- 如果將 JS 部分修改為下面的寫法,在 JSContext 也是取不到
function 的憔四,懷疑是 $ 符號無法在 JSContext 中使用膀息。求大牛解答。
$(document).ready(function() {
$.fn.helloWorld = function(name) {
var result = "hello,"+name;
return result;
};
});