Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
您可以使用PhoneGap和iOS从本机代码(而不是回调)调用javascript函数吗?_Javascript_Objective C_Events_Cordova_Cocoaasyncsocket - Fatal编程技术网

您可以使用PhoneGap和iOS从本机代码(而不是回调)调用javascript函数吗?

您可以使用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中对其进行处理 这可能吗

我希望能够在我的应用程序中使用PhoneGap。我必须构建一个定制的协议/插件,以便从Javascript调用本机方法。我知道当本机代码返回时,可以在Javascript中调用success函数

我需要能够做的是从本机代码调用javascript函数。基本上,该应用程序将通过本地网络连接到OSX同伴应用程序,当OSX应用程序向iOS应用程序发送数据时,它将以Objective C方法进行处理,我需要能够将结果发送到PhoneGap/javascript,并在WebView中对其进行处理

这可能吗?我只能从javascript中找到有关调用本机的信息,而不是相反

谢谢, 托马斯

使用下面答案中的代码:

MyPhoneGapPlugin.m

- (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在我这么做后可能已经改变了很多,所以我不太确定现在需要什么。我可以通过我的应用程序中的任何方法调用它,也许可以查看文档中的这篇文章以了解更多信息: