从objective-c调用javascript函数的语法

Posted

技术标签:

【中文标题】从objective-c调用javascript函数的语法【英文标题】:Syntax to call javascript function from objective-c 【发布时间】:2013-01-04 05:43:41 【问题描述】:

我正在使用 phonegap/cordova 2.1.0 框架在 ios 中制作应用程序。我想从objective-c调用驻留在index.html中的javascript函数。所以,首先我加载 index.html,然后尝试调用 javascript 函数。我的代码如下:

 NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"www"];
    NSURL *baseURL = [NSURL fileURLWithPath:path];
    NSString *myFile = [path stringByAppendingPathComponent:@"index.html"];

//NSLog(@"base url= %@",myFile);

NSData *myFileData = [[NSData alloc] initWithContentsOfFile:myFile];
NSString* myFileHtml = [[NSString alloc] initWithData:myFileData encoding:NSASCIIStringEncoding];

[theWebView loadHTMLString:myFileHtml baseURL:baseURL];

// to call javascript function 
[theWebView stringByEvaluatingJavaScriptFromString:@"onDeviceReady()"];

倒数第二行加载 index.html,最后一行调用其中的函数。但是,不知何故,上面的代码不起作用。我在语法明智的地方出错了吗?

Alos,由于 index.html 之前已经被加载,所以我如何指定函数存在的文件名(即 index.html)而不再次加载它?谢谢。

Javascript函数如下:

function onDeviceReady(callback) 

                var item = window.localStorage.getItem("key");
                var message = "deviceready localStorage.getItem('key')="+item+" localStorage.length="+window.localStorage.length;

                if( item == null)
                    item = "";
                
                item = item + "value";

                window.localStorage.setItem("key", item);

                var value = window.localStorage.getItem("key");

                if ( deviceType == 'android' && gAppControl.loadScript == false )
                    loadScript('iscroll.js');
                    gAppControl.loadScript = true;
                    document.addEventListener("backButton", backPressed, false);
                

                var db = window.openDatabase(dbName, "1.0", gAppConfig.dbMessage, 200000);

                db.transaction(queryDB, errorCB , callback);

                // return
                return;
            

【问题讨论】:

你的意思是不知何故或有时? 我的意思是代码总是不工作.. :) objective-C 代码没问题。给我看看js代码。 在js-function周围加上try-catch,有没有报错? 我已经附上了j-s代码。 【参考方案1】:
onDeviceReady()

这是phonegap API,如果设备没有准备好,你将无法调用任何Phonegap插件,那么onDeviceReady()函数的细节是什么?是否涉及任何 phonegap-plugin?

代码好像没问题,这里是我的code,有桥接Objective-C和HTML-Javascript,

【讨论】:

onDeviceready 只是函数的名称。它与设备是否准备好无关。我的问题是,我的最后一行代码是否正确?在 javascript 中调用函数的语法是否正确?

以上是关于从objective-c调用javascript函数的语法的主要内容,如果未能解决你的问题,请参考以下文章

从 Javascript 调用 Objective-C 方法

通过 Cordova 插件从 Objective-C 调用 Javascript

如何从Javascript调用Objective-C?

如何从 Objective-C 中调用的 JavaScript 函数访问 response.body?

如何使用单个参数从 Javascript 调用 Objective-C 方法并在 Xcode 中处理它

如何从objective-c方法调用我的phonegap ios应用程序中的javascript函数?