Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.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
在AppDelegate中从Objective-C调用JavaScript_Javascript_Ios_Objective C_Cordova - Fatal编程技术网

在AppDelegate中从Objective-C调用JavaScript

在AppDelegate中从Objective-C调用JavaScript,javascript,ios,objective-c,cordova,Javascript,Ios,Objective C,Cordova,有没有办法从Objective-C调用设备令牌 我刚刚创建了一个cordova ios项目,因为我只有Objective-C的基本知识。它将自动生成AppDelegate.mclass @implementation AppDelegate - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { self.viewControl

有没有办法从Objective-C调用设备令牌

我刚刚创建了一个cordova ios项目,因为我只有Objective-C的基本知识。它将自动生成
AppDelegate.m
class

@implementation AppDelegate
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
    self.viewController = [[MainViewController alloc] init];

    NSString * jsCallBack = [NSString stringWithFormat:@"myFunction()"];
    [webView stringByEvaluatingJavaScriptFromString:jsCallBack];  

    return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
@end
如何从inappbrowser中加载的index.html文件调用javascript函数

<!DOCTYPE html>
<html>
  <head>
    <title>Device Ready Example</title>
    <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
    <script type="text/javascript" charset="utf-8">

    // Wait for device API libraries to load
    //
           myFunction()
               {
              alert('called');
           }
        function onLoad() {
            document.addEventListener("deviceready", onDeviceReady, false);
        }
        // device APIs are available
        //
        function onDeviceReady() {
            // Now safe to use device APIs
        }
        </script>
      </head>
      <body onload="onLoad()">
      </body>
    </html>

设备就绪示例
//等待加载设备API库
//
myFunction()
{
警报(“被呼叫”);
}
函数onLoad(){
文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
}
//设备API可用
//
函数ondevicerady(){
//现在可以安全地使用设备API了
}
首先:

确保您的webview已经加载了HTML页面(如果您还需要修改DOM中的某些UI元素,它可能也应该已经被呈现。加载本身是异步执行的。这意味着您不能在单个进程中实现它,而必须等到它准备好进行操作为止)

当您在应用程序的start方法中通过注入调用函数时,我认为webview还没有准备好

对于iOS应用程序,请使用代理的方法:

UIWebViewDelegate会通知您某些状态(-更改)。例如:

因此,我建议使用以下委托属性扩展AppDelegate(或创建新委托):

@property (nonatomic) UIWebViewDelegate *webDelegate;
相应地设置webView的委托:

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
    self.viewController = [[MainViewController alloc] init];
    // I just used your very own code for this, I think you will have a separate property for this webView ?
    webView.delegate = self;
    return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
并且还实现一个webview委托方法(在本例中,当webview完成加载时:

@implementation AppDelegate
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
    ...
}

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSString * jsCallBack = [NSString stringWithFormat:@"myFunction()"];
    [webView stringByEvaluatingJavaScriptFromString:jsCallBack];
}

@end

您可以在objective C中的任意位置调用javascript函数:

NSString *str=@"window['function_name'].apply(window,['param1','param2'])";

[webview evaluateJavaScript:str completionHandler:nil];

我想我们需要您提供更多信息:如果您想用Javascriot将其注入HTML:HTML/Javascript是什么样子的,是否有一个函数?此外,什么样的“设备令牌”对于推送服务,请详细说明您的要求,并提供一些附加信息。鳞翅目i改进了详细的问题