2015-06-30 63 views
-1

我想從我的視圖控制器類的一個調用javascript函數,調用JavaScript功能的iOS

這裏是我的代碼片段我都試過了,但它不工作:(

代碼在我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 請幫

位置和在此先感謝!

+0

您是否檢查過js目錄是否在您的包中?從你的錯誤聽起來好像不是。 –

+0

也試過'的NSString *路徑= [[一個NSBundle mainBundle] pathForResource:@ 「應用程序」 ofType:@ 「JS」 inDirectory:@ 「JS」];'現在返回,而不是零路徑,但JavaScript函數是沒有得到所謂:( – Krunal

+0

添加一些調試的NSLog語句的每一行代碼,並張貼,否則很難知道什麼錯誤。此外,沒有app.js依賴於其他的JavaScript。如果是這樣,你必須加載所有需要第一支撐? –

回答

1

我想你應該改變你的代碼的順序:

1)首先你要計算這個腳本:

[context evaluateScript: [self loadJsFromFile]]; 

2)然後從上下文

得到函數的名稱
JSValue *function = context[@"ProfilePicFunction"]; 
+0

試圖不工作:(請幫助我 – Krunal

+0

NSLog的顯示'結果= undefined' – Krunal

+0

你不會得到的結果,因爲你從方法返回任何結果,我認爲這可能幫助:http://hayageek.com/execute-javascript-in-ios/ ...你可以改變方法的執行情況,例如求和操作,並檢查你的JS代碼是否正確 –

-1
- (NSString *)loadJsFromFile{ 
    NSString* js = [[NSString alloc] initWithData:[NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"app" ofType:@"js"]] encoding:NSUTF8StringEncoding]; 
    return js; 
}