PhoneApp 3.1.0中没有调用InAppBrowser

我已经从NPM中获取了最新版本的phonegap并安装了它。 我创build了一个新项目,并在PhoneGap的每个文档中添加了InAppBrowser插件 。 然后,我从我的Web应用程序进行JavaScript调用,但是我从来没有看到我在下面编码的警报,也没有看到它在Xcode中为插件设置的任何断点。

这里是JS的代码:

var pdfViewer = { loadPdf: function(record, successCallback, errorCallback) { var filename = record.get('building') + "-" + record.get('floor') + ".pdf"; var url = People.app.srvcUrl + Global.floorPlanUri + filename + "?access_token=" + People.app.bearerToken.access_token; if (Ext.os.is.iOS) { // cordova.exec(successCallback, errorCallback, "PDFViewer", "loadRemotePdf", [url, filename]); var ref = window.open(url, '_blank', 'location=yes'); ref.addEventListener('loadstart', function() { alert("You made it!"); }); } else { window.open(url, '_system', 'location=yes'); } } }; 

会发生什么是启动的URL显示我的现有应用程序的顶部没有警报,没有位置/closuresbutton的PDF。 任何想法为什么InAppBrowser没有被使用? 我需要让它显示在一个closuresbutton的窗口中。

以下是我在运行应用程序时在Xcode中看到的输出:

 2013-10-23 09:39:02.380 mobile-xxx-ios[3302:60b] Multi-tasking -> Device: YES, App: YES 2013-10-23 09:39:02.426 mobile-xxx-ios[3302:60b] Unlimited access to network resources 2013-10-23 09:39:02.564 mobile-xxx-ios[3302:60b] [CDVTimer][phonedialer] 0.477016ms 2013-10-23 09:39:02.567 mobile-xxx-ios[3302:60b] [CDVTimer][sms] 0.230014ms 2013-10-23 09:39:02.569 mobile-xxx-ios[3302:60b] [CDVTimer][emailcomposer] 0.252008ms 2013-10-23 09:39:02.571 mobile-xxx-ios[3302:60b] [CDVTimer][TotalPluginStartup] 7.416010ms 2013-10-23 09:39:02.957 mobile-xxx-ios[3302:60b] Resetting plugins due to page load. 2013-10-23 09:39:05.789 mobile-xxx-ios[3302:60b] Finished load of: file:///var/mobile/Applications/5916FB20-FDEC-40A7-AE77-9EF14AF30585/mobile-xxx-ios.app/www/index.html 2013-10-23 09:39:18.168 mobile-xxx-ios[3302:60b] Resetting plugins due to page load. 2013-10-23 09:39:18.680 mobile-xxx-ios[3302:60b] Finished load of: https://pdfs.xxx.com/noauth/plans/x-1.pdf FAILED to create agar for HelveticaLTMM. FAILED to create agar for TimesLTMM. 

这是我的config.xml:

 <widget xmlns = "http://www.w3.org/ns/widgets" id = "io.cordova.helloCordova" version = "2.0.0"> <name>Mobile App</name> <description> Mobile Phonegap Application </description> <access origin="*" subdomains="true"/> <content src="index.html" /> <!-- Preferences for iOS --> <preference name="KeyboardDisplayRequiresUserAction" value="true" /> <preference name="SuppressesIncrementalRendering" value="false" /> <preference name="UIWebViewBounce" value="true" /> <preference name="TopActivityIndicator" value="gray" /> <preference name="EnableLocation" value="false" /> <preference name="EnableViewportScale" value="false" /> <preference name="AutoHideSplashScreen" value="true" /> <preference name="ShowSplashScreenSpinner" value="true" /> <preference name="MediaPlaybackRequiresUserAction" value="false" /> <preference name="AllowInlineMediaPlayback" value="false" /> <preference name="OpenAllWhitelistURLsInWebView" value="false" /> <preference name="BackupWebStorage" value="cloud" /> <preference name="permissions" value="none" /> <preference name="orientation" value="default" /> <preference name="target-device" value="universal" /> <preference name="fullscreen" value="true" /> <preference name="webviewbounce" value="true" /> <preference name="prerendered-icon" value="true" /> <preference name="stay-in-webview" value="false" /> <preference name="ios-statusbarstyle" value="black-opaque" /> <preference name="detect-data-types" value="true" /> <preference name="exit-on-suspend" value="false" /> <preference name="show-splash-screen-spinner" value="true" /> <preference name="auto-hide-splash-screen" value="true" /> <preference name="disable-cursor" value="false" /> <preference name="android-minSdkVersion" value="7" /> <preference name="android-installLocation" value="auto" /> <feature name="SSLSelfCertOverride"> <param name="ios-package" value="SSLSelfCertOverride" /> </feature> <feature name="LocalStorage"> <param name="ios-package" value="CDVLocalStorage"/> </feature> <feature name="PhoneDialer"> <param name="ios-package" value="PhoneDialer"/> <param name="onload" value="true" /> </feature> <feature name="Sms"> <param name="ios-package" value="Sms"/> <param name="onload" value="true" /> </feature> <feature name="EmailComposer"> <param name="ios-package" value="EmailComposer"/> <param name="onload" value="true" /> </feature> <feature name="InAppBrowser"> <param name="ios-package" value="CDVInAppBrowser" /> </feature> <feature name="Geolocation"> <param name="ios-package" value="CDVLocation" /> </feature> <feature name="PackageInfo"> <param name="ios-package" value="PackageInfo" /> </feature> <feature name="PDFViewer"> <param name="ios-package" value="PDFViewer" /> </feature> </widget> 

请检查以下内容:

步骤1

在你的“platforms / ios / www / plugins /”中,是否有一个“org.apache.cordova.inappbrowser”目录? 如果答案是否定的,则不能成功添加。

解决scheme :创build目录“org.apache.cordova.inappbrowser / www /”,并在其中放入“InAppBrowser.js”。 您可以在PhoneGap项目根目录“ yourproject /plugins/org.apache.cordova.inappbrowser/www/”中find它。 然后转到第2步。

第2步

打开“platforms / ios / www / cordova_plugins.js”。 在“module.exports”中,添加:

  { "file": "plugins/org.apache.cordova.inappbrowser/www/InAppBrowser.js", "id": "org.apache.cordova.inappbrowser.InAppBrowser", "clobbers": [ "window.open" ] } 

在“module.exports.metadata”中,添加:

  "org.apache.cordova.inappbrowser": "0.2.5" 

并保存。 “0.2.5”是插件的版本,可以在plugin.xml中find。 (看起来这个数字没有关系。)

然后运行它,打开你的检查员,并检查“InAppBrowser.js”是否已成功添加到头标签。

注意:手动将“InAppBrowser.js”添加到头标签而不修改“cordova_plugins.js”将不起作用。 如果回答1是,则直接转到步骤2。

希望这可以解决你的问题。

检查你的config.xml有这些东西:

  <?xml version='1.0' encoding='utf-8'?> <widget id="com.phonegap.helloworld" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0"> <name>HelloWorld</name> <description> Hello World sample application that responds to the deviceready event. </description> <author email="support@phonegap.com" href="http://phonegap.com"> PhoneGap Team </author> <feature name="http://api.phonegap.com/1.0/device" /> <preference name="phonegap-version" value="3.1.0" /> <preference name="permissions" value="none" /> <preference name="orientation" value="default" /> <preference name="target-device" value="universal" /> <preference name="fullscreen" value="true" /> <preference name="webviewbounce" value="true" /> <preference name="prerendered-icon" value="true" /> <preference name="stay-in-webview" value="false" /> <preference name="ios-statusbarstyle" value="black-opaque" /> <preference name="detect-data-types" value="true" /> <preference name="exit-on-suspend" value="false" /> <preference name="show-splash-screen-spinner" value="true" /> <preference name="auto-hide-splash-screen" value="true" /> <preference name="disable-cursor" value="false" /> <preference name="android-minSdkVersion" value="7" /> <preference name="android-installLocation" value="auto" /> <icon src="icon.png" /> <icon gap:density="ldpi" gap:platform="android" src="res/icon/android/icon-36-ldpi.png" /> <icon gap:density="mdpi" gap:platform="android" src="res/icon/android/icon-48-mdpi.png" /> <icon gap:density="hdpi" gap:platform="android" src="res/icon/android/icon-72-hdpi.png" /> <icon gap:density="xhdpi" gap:platform="android" src="res/icon/android/icon-96-xhdpi.png" /> <icon gap:platform="blackberry" src="res/icon/blackberry/icon-80.png" /> <icon gap:platform="blackberry" gap:state="hover" src="res/icon/blackberry/icon-80.png" /> <icon gap:platform="ios" height="57" src="res/icon/ios/icon-57.png" width="57" /> <icon gap:platform="ios" height="72" src="res/icon/ios/icon-72.png" width="72" /> <icon gap:platform="ios" height="114" src="res/icon/ios/icon-57-2x.png" width="114" /> <icon gap:platform="ios" height="144" src="res/icon/ios/icon-72-2x.png" width="144" /> <icon gap:platform="webos" src="res/icon/webos/icon-64.png" /> <icon gap:platform="winphone" src="res/icon/windows-phone/icon-48.png" /> <icon gap:platform="winphone" gap:role="background" src="res/icon/windows-phone/icon-173.png" /> <gap:splash gap:density="ldpi" gap:platform="android" src="res/screen/android/screen-ldpi-portrait.png" /> <gap:splash gap:density="mdpi" gap:platform="android" src="res/screen/android/screen-mdpi-portrait.png" /> <gap:splash gap:density="hdpi" gap:platform="android" src="res/screen/android/screen-hdpi-portrait.png" /> <gap:splash gap:density="xhdpi" gap:platform="android" src="res/screen/android/screen-xhdpi-portrait.png" /> <gap:splash gap:platform="blackberry" src="res/screen/blackberry/screen-225.png" /> <gap:splash gap:platform="ios" height="480" src="res/screen/ios/screen-iphone-portrait.png" width="320" /> <gap:splash gap:platform="ios" height="960" src="res/screen/ios/screen-iphone-portrait-2x.png" width="640" /> <gap:splash gap:platform="ios" height="1024" src="res/screen/ios/screen-ipad-portrait.png" width="768" /> <gap:splash gap:platform="ios" height="768" src="res/screen/ios/screen-ipad-landscape.png" width="1024" /> <gap:splash gap:platform="winphone" src="res/screen/windows-phone/screen-portrait.jpg" /> <gap:plugin name="org.apache.cordova.geolocation" /> <gap:plugin name="org.apache.cordova.network-information" version="0.2.3" /> <gap:plugin name="org.apache.cordova.inappbrowser" version="0.1.0" /> <access origin="http://127.0.0.1*" /> <access origin="*" /> <content src="index.html" /> </widget> 

我已经解决了这个问题,通过专门使用Cordova CLI命令来创build项目,然后添加插件。 看来你必须使用他们的构build命令来把所有东西都移到正确的目录中。 现在,我只是发出一个cordova build ,并将在适当的位置为适当的插件文件为iOS和Android构build。

我也修改了生成的js / index.js来调用我的Sencha Touch应用程序,如下所示:

 var device = false; var app = { // Application Constructor initialize: function() { this.bindEvents(); }, // Bind Event Listeners // // Bind any events that are required on startup. Common events are: // 'load', 'deviceready', 'offline', and 'online'. bindEvents: function() { document.addEventListener('deviceready', this.onDeviceReady, false); }, // deviceready Event Handler // // The scope of 'this' is the event. In order to call the 'receivedEvent' // function, we must explicity call 'app.receivedEvent(...);' onDeviceReady: function() { app.receivedEvent('deviceready'); }, // Update DOM on a Received Event receivedEvent: function(id) { try { device = true; People.app.mainLaunch(); } catch(e) { alert("Error: " + e); } console.log('Received Event: ' + id); } }; 

然后在我的Sencha Touch应用程序中,我创build了修改启动方法,以防止在启动PhoneGap之前,我的ST应用程序正在初始化之间的竞争状态,如下所示:

 launch: function() { this.launched = true; this.mainLaunch(); }, mainLaunch: function() { try { if (this.launched && device) { Ext.Viewport.add({xtype:'myApp'); } } catch(e) { alert(e); } },