【发布时间】:2018-01-08 15:23:28
【问题描述】:
更新: 现在,JavaScript 能够在事件“deviceReady”之后调用我的 Objective C 插件代码。 但 它仅在我将应用程序推送到后台时才有效,否则,它只会挂在那里并且从不调用我的插件代码。 我可以看到控制台显示插件何时被调用
[29277:15212897] THREAD WARNING: ['HybridBridge'] took '9252.614014' ms. Plugin should use a background thread.
我了解警告“'9252.614014' ms”是由我将应用程序推到后台的手动操作引起的
但是为什么???为什么我的 Objective C 插件代码只有在应用进入后台时才会被调用?
我正在为基于 C 的 iOS 应用程序创建一个 Cordova 4.4.0 插件 JavaScript 成功触发,但是,javascript 代码:
cordova.exec(saySuccess, sayFailure, PLUGIN_NAME, METHOD_NAME, [page]);
它不会触发我的 Objective C 代码
Objective C 方法根本没有被调用
插件已在config.xml中注册如下
<feature name="HybridBridge">
<param name="ios-package" value="HybridBridge"/>
<param name="onload" value="true" />
</feature>
下面是我的代码,请帮忙
调用Objective C方法的JavaScript代码:
var hybridBridge = (function() {
var PLUGIN_NAME = "HybridBridge";
var METHOD_NAME = "loadExternalPage";
this.loadExternalPage = function (page) {
cordova.exec(saySuccess, sayFailure, PLUGIN_NAME, METHOD_NAME, [page]);
};
return this;
}());
function saySuccess() {
alert("Success");
}
function sayFailure () {
alert ("Failure");
}
Config.xml 文件:
<widget>
<!-- Whitelist docs: https://github.com/apache/cordova-plugin-whitelist -->
<access origin="*" />
<!-- Grant certain URLs the ability to launch external applications. This
behaviour is set to match that of Cordova versions before 3.6.0, and
should be reviewed before launching an application in production. It
may be changed in the future. -->
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
<!-- Preferences for iOS -->
<preference name="AllowInlineMediaPlayback" value="false" />
<preference name="BackupWebStorage" value="cloud" />
<preference name="DisallowOverscroll" value="false" />
<preference name="EnableViewportScale" value="false" />
<preference name="KeyboardDisplayRequiresUserAction" value="true" />
<preference name="MediaPlaybackRequiresUserAction" value="false" />
<preference name="SuppressesIncrementalRendering" value="false" />
<preference name="SuppressesLongPressGesture" value="false" />
<preference name="Suppresses3DTouchGesture" value="false" />
<preference name="GapBetweenPages" value="0" />
<preference name="PageLength" value="0" />
<preference name="PaginationBreakingMode" value="page" /> <!-- page, column -->
<preference name="PaginationMode" value="unpaginated" /> <!-- unpaginated, leftToRight, topToBottom, bottomToTop, rightToLeft -->
<feature name="LocalStorage">
<param name="ios-package" value="CDVLocalStorage"/>
</feature>
<feature name="HandleOpenUrl">
<param name="ios-package" value="CDVHandleOpenURL"/>
<param name="onload" value="true"/>
</feature>
<feature name="IntentAndNavigationFilter">
<param name="ios-package" value="CDVIntentAndNavigationFilter"/>
<param name="onload" value="true"/>
</feature>
<feature name="GestureHandler">
<param name="ios-package" value="CDVGestureHandler"/>
<param name="onload" value="true"/>
</feature>
<feature name="HybridBridge">
<param name="ios-package" value="HybridBridge"/>
<param name="onload" value="true" />
</feature>
</widget>
插件的目标 C 代码
#import "HybridBridge.h"
@implementation HybridBridge
-(void) loadExternalPage:(CDVInvokedUrlCommand*) command {
NSLog(@"init");
NSString *page = [command.arguments objectAtIndex:0];
NSString *webPage =[NSString stringWithFormat:@"%@%@", [CommonUtil readInfoPlist:@"host"], page];
CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:webPage];
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}
@end
我真的不知道为什么我的插件方法“loadExternalPage”在 Objective-C 中没有被调用。请帮忙。
【问题讨论】:
标签: javascript ios objective-c cordova phonegap