从 iOS 中的 UIViewController 类调用 JavaScript 函数
Posted
技术标签:
【中文标题】从 iOS 中的 UIViewController 类调用 JavaScript 函数【英文标题】:Call JavaScript function from UIViewController class in iOS 【发布时间】:2015-06-30 08:53:23 【问题描述】:我想从我的视图控制器类之一调用 javascript 函数,
这是我尝试过的代码 sn-p,但它不起作用:(
代码在我的ViewController
- (NSString *)MyMehtod
JSContext *context = [[JSContext alloc] init];
JSValue *function = context[@"ProfilePicFunction"];
[context evaluateScript: [self loadJsFromFile]]; //crashes here EXC_BAD_ACESS
JSValue* result = [function callWithArguments:@[[documentsDirectory stringByAppendingString:@"/ProfilePic.png"]]];
NSLog(@"result = %@",result);
- (NSString *)loadJsFromFile
NSString *path = [[NSBundle mainBundle] pathForResource:@"app" ofType:@"js"]; //path returns here as nil
NSString *jsScript = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; //jsScript returns here as nil
return jsScript;
app.js
文件中的代码
function ProfilePicFunction(ProfilePicPath)
var d= new Date();
var userFullPath = ProfilePicPath+"?"+d.getTime();
$("#userImg").attr("src",userFullPath);
app.js
的位置
请提前帮助和感谢!!
【问题讨论】:
你检查过 js 目录在你的包里吗?从您的错误来看,这听起来不像。 也试过NSString *path = [[NSBundle mainBundle] pathForResource:@"app" ofType:@"js" inDirectory:@"js"];
它现在返回路径而不是nil但是javascript函数没有被调用:(
为每一行代码添加一些调试NSLog语句并贴出来。否则很难知道出了什么问题。此外,app.js 是否依赖于其他 javascript。如果是这样,您必须先加载它需要的所有支持?
我觉得你可能是这里的跟踪方式。 app.js 正在运行 jquery 代码。您将需要一个 JSContext 到 UIWebView 或其他 JSVirtualMachine 上,其中加载的网页已拉入 jquery 以及您要操作的任何 DOM?
【参考方案1】:
我认为您应该更改代码的顺序:
1) 首先你必须评估脚本:
[context evaluateScript: [self loadJsFromFile]];
2) 然后从上下文中获取函数名
JSValue *function = context[@"ProfilePicFunction"];
【讨论】:
你不会得到结果,因为你没有从方法中返回任何东西,我认为这可能会有所帮助:hayageek.com/execute-javascript-in-ios ...你可以将方法的实现更改为 sum 操作并检查你的JS代码是否正确 谢谢你的代码3rd
点对我有帮助(Access JavaScript functions and execute them in Objective-C)
但我的问题是我的javascript函数位于app.js
文件中:(如何访问该文件并执行该代码目标c?【参考方案2】:
- (NSString *)loadJsFromFile
NSString* js = [[NSString alloc] initWithData:[NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"app" ofType:@"js"]] encoding:NSUTF8StringEncoding];
return js;
【讨论】:
以上是关于从 iOS 中的 UIViewController 类调用 JavaScript 函数的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式从 iOS Swift 3 中的 XIB 推送和呈现给 UIViewController
如何从 Swift 中的 UITableViewRowAction 向 UIViewController 传递数据?
iOS:如何从 UIViewController 通知 appDelegate
iOS对UIViewController生命周期和属性方法的解析