真的就是亂寫用的筆記

如之前所說。如果你有一段 Javascript 是這樣:

function x(x) {
	return x + 1;
}

用 ObjeC controller 要 webView 產生上面那段 Javascript code,會是這樣:

WebScriptObject *obj = [webView windowScriptObject];
NSString *s = @"function x(x) { return x + 1};";
[obj evaluateWebScript:s];

非常想不開的話,你會寫成這樣:

#import <JavaScriptCore/JavaScript.h>

JSGlobalContextRef ctx = [[webView mainFrame] globalContext];

JSStringRef xName = JSStringCreateWithUTF8CString("x");
JSStringRef parameters0 = JSStringCreateWithUTF8CString("x");
JSStringRef parameters[1] = {parameters0};
JSStringRef body = JSStringCreateWithUTF8CString("return x + 1");
JSObjectRef x = JSObjectMakeFunction(ctx, xName, 1, parameters, body, NULL, 0, NULL);
JSStringRelease(xName);
JSStringRelease(parameters0);
JSStringRelease(body);

JSValueRef argument0 = JSValueMakeNumber(ctx, 1);
JSValueRef arguments[1] = {argument0};
JSValueRef result = JSObjectCallAsFunction(ctx, x, NULL, 1, arguments, NULL);
double r = JSValueToNumber(ctx, result, NULL);
NSLog(@"r:%f", r);
1 year ago