您可以使用PhoneGap和iOS从本机代码(而不是回调)调用javascript函数吗?
我希望能够在我的应用程序中使用PhoneGap。我必须构建一个定制的协议/插件,以便从Javascript调用本机方法。我知道当本机代码返回时,可以在Javascript中调用success函数 我需要能够做的是从本机代码调用javascript函数。基本上,该应用程序将通过本地网络连接到OSX同伴应用程序,当OSX应用程序向iOS应用程序发送数据时,它将以Objective C方法进行处理,我需要能够将结果发送到PhoneGap/javascript,并在WebView中对其进行处理 这可能吗?我只能从javascript中找到有关调用本机的信息,而不是相反 谢谢, 托马斯 使用下面答案中的代码: MyPhoneGapPlugin.m您可以使用PhoneGap和iOS从本机代码(而不是回调)调用javascript函数吗?,javascript,objective-c,events,cordova,cocoaasyncsocket,Javascript,Objective C,Events,Cordova,Cocoaasyncsocket,我希望能够在我的应用程序中使用PhoneGap。我必须构建一个定制的协议/插件,以便从Javascript调用本机方法。我知道当本机代码返回时,可以在Javascript中调用success函数 我需要能够做的是从本机代码调用javascript函数。基本上,该应用程序将通过本地网络连接到OSX同伴应用程序,当OSX应用程序向iOS应用程序发送数据时,它将以Objective C方法进行处理,我需要能够将结果发送到PhoneGap/javascript,并在WebView中对其进行处理 这可能吗
- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port {
NSLog(@"Connected To %@:%i.", host, port);
NSString* jsString = [NSString stringWithFormat:@"alert(connected to: %@);", host];
[theWebView stringByEvaluatingJavaScriptFromString:jsString];
[self readWithTag:2];
}
告诉我错误“未知接收者”theWebView“你是说“UIWebView”吗
更新:找到答案:使用phonegap助手,我可以写这样的东西
[super writeJavascript:@"alert('connected');"];
这对你有用吗 摘自本页: 您还可以使用参数调用JavaScript函数。假设您已经编写了如下所示的JavaScript函数:
function addImage(image, width, height) { ... }
其目的是向网页添加图像。它由三个参数调用:图像,图像的URL;宽度,图像的屏幕宽度;和高度,图像的屏幕高度。您可以从Objective-C调用此方法,方法有两种。第一种方法在使用WebScript对象桥之前创建参数数组:
id win = [webView windowScriptObject];
NSArray *args = [NSArray arrayWithObjects:
@"sample_graphic.jpg",
[NSNumber numberWithInt:320],
[NSNumber numberWithInt:240],
nil];
[win callWebScriptMethod:@"addImage"
withArguments:args];
您可以使用
UIWebView
从本机代码轻松调用JavaScript:
[webView stringByEvaluatingJavaScriptFromString:@"myJSFunction()"];
要将某个函数的结果用作JS函数的参数,请执行以下操作:
NSString *stringData = getStringData(); // however you get it
[webView stringByEvaluatingJavaScriptFromString:
[NSString stringWithFormat:@"myJSFunction(%@)", stringData]];
找到PhoneGap帮助程序以完成此操作。。。使用以下命令将javascript写入webView:
[super writeJavascript:@"alert('it works');"];
你应该试试这个
[webView stringByEvaluatingJavaScriptFromString:@"sendSelectedDate()"];
不幸的是,这是OSX特有的,OP使用的是PhoneGap和iOS。是的,我需要iOS应用程序上的这一功能,而不是Mac OSX Companion应用程序。谢谢你。太棒了,这对我来说应该有用。我甚至没有想到使用UIWebView类,我想我太专注于PhoneGap API了。非常感谢!谢谢你的更新。这可能是我的下一个问题。这只能在某些地方使用吗?我正试图在AsyncSockets didConnectToHost内的PhoneGap插件文件“MyPhoneGapPlugin.m”中使用它,这样我就可以提醒webview它已成功连接并显示IP,但它抛出了一个错误,请参阅问题以获取更新的代码和error.Hmm。好吧,这意味着
从该函数内部看不到webview
。您需要能够从MyPhoneGapPlugin.m
中查看@属性UIWebView*theWebView
或UIWebView*theWebView
。你可能已经试过确保了,但是。。除此之外,我真的不知道它为什么不起作用。剪掉n个贴纸,注意区分大小写:StringByEvaluationJavaScriptFromString而不是StringByEvaluationJavaScriptFromString你能详细说明你的答案吗。我也有同样的问题,我是科尔多瓦的新手。我从MainViewController和我的Phonegap插件调用它,它在webview中没有响应。他们是我错过的东西吗?@Bhuwanshani我担心cordova在我这么做后可能已经改变了很多,所以我不太确定现在需要什么。我可以通过我的应用程序中的任何方法调用它,也许可以查看文档中的这篇文章以了解更多信息: