我只是试图在我的PhoneGap应用程序中设置一个功能,以在外部浏览器中打开某些链接。该代码似乎可以在Android上正常运行(并且我没有在Windows Phone上进行测试,因为插件信息声称尚不支持此功能...),但是每次我尝试使其在iPhone上运行时,模拟器(iOS 5.1),它因以下错误而崩溃:
testCB[3332:c07] CDVPlugin class childbrowser.js (pluginName: ChildBrowser) does not exist.
testCB[3332:c07] ERROR: Plugin 'ChildBrowser' not found, or is not a CDVPlugin. Check your plugin mapping in Cordova.plist.
testCB[3332:c07] -[CDVCommandQueue executePending] [Line 102] FAILED pluginJSON = ["ChildBrowser1249404349","ChildBrowser","showWebPage",["http://www.apple.com",{"showLocationBar":true}]]
我浏览了所有论坛和论坛,并且不断看到人们提到更新Cordova.plist文件。很好,所以这里就是(请注意,这是针对全新的Cordova应用程序,而不是升级或更新,我现在正在通过测试应用程序尝试此操作,以排除我自己的应用程序中的不确定性):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- the standard keys snipped -->
<key>ExternalHosts</key>
<array>
<string>*</string>
</array>
<key>Plugins</key>
<dict>
<key>ChildBrowser</key>
<string>childbrowser.js</string>
<key>ChildBrowserCommand</key>
<string>ChildBrowserCommand</string>
<key>Device</key>
<string>CDVDevice</string>
<key>Logger</key>
<string>CDVLogger</string>
<key>Compass</key>
<string>CDVLocation</string>
<key>Accelerometer</key>
<string>CDVAccelerometer</string>
<key>Camera</key>
<string>CDVCamera</string>
<key>NetworkStatus</key>
<string>CDVConnection</string>
<key>Contacts</key>
<string>CDVContacts</string>
<key>Debug Console</key>
<string>CDVDebugConsole</string>
<key>Echo</key>
<string>CDVEcho</string>
<key>File</key>
<string>CDVFile</string>
<key>FileTransfer</key>
<string>CDVFileTransfer</string>
<key>Geolocation</key>
<string>CDVLocation</string>
<key>Notification</key>
<string>CDVNotification</string>
<key>Media</key>
<string>CDVSound</string>
<key>Capture</key>
<string>CDVCapture</string>
<key>SplashScreen</key>
<string>CDVSplashScreen</string>
<key>Battery</key>
<string>CDVBattery</string>
<key>Globalization</key>
<string>CDVGlobalization</string>
</dict>
</dict>
</plist>
(编辑)在我的index.html文件中,其中包含(我意识到这几乎是不言而喻的。我还意识到,很多人不考虑先尝试所有显而易见的东西而发布了很多问题!):
<script type="text/javascript" src="cordova-2.2.0.js"></script>
<script type="text/javascript" src="childbrowser.js"></script>
我的js调用看起来像:
onDeviceReady: function() {
app.receivedEvent('deviceready');
var link = document.getElementById('launchApple');
console.log('derp?');
if(link){
//var cb = ChildBrowser.install();
console.log("We're trying to add a click handler link");
link.addEventListener('click', function() {
console.log('click');
window.plugins.childBrowser.openExternal('http://www.apple.com'); });
}
},
单击链接时,出现上述错误。
我尝试将childbrowser.js文件的大小写更改为ChildBrowser.js。
我试过在iPhone 6模拟器中运行它。
我的插件文件夹包含从https://github.com/alunny/ChildBrowser下载的包中的所有文件
我已经从〜/ Library / Application Support中清除了缓存
我在该项目上尝试过清洁。
有什么想法吗?我将开始寻找一只好山羊或小鸡,以快速牺牲“一次编写,到处奔跑”的神灵(我相当确定是洛奇(Trickster)的后裔)!
最佳答案
好,有几件事。一个,个人的“ DERP!”但是其余的我只能归结为拙劣的文档和怪异的实现。
在首页(https://github.com/alunny/ChildBrowser)上,.openExternal()
文档中有一条注释,说这仅适用于Android。这是我的“ derp!”
(但是,我还没有找出为什么有一个针对onOpenExternal的钩子,据说该钩子仅适用于iOS ...)
其次,扔掉所有告诉您添加childbrowser.js作为ChildBrowser Plugins项的字符串的文档。您的插件应如下所示:
<key>ChildBrowser</key>
<string>ChildBrowserCommand</string>
<key>ChildBrowserCommand</key>
<string>ChildBrowserCommand</string>
该问题的重点:
target =“ _ blank”可在iPhone的
<a>
标签上使用。确保将ChildBrowser(字符串)ChildBrowserCommand项目(而不是childbrowser.js)放入插件列表中!
.openExternal()目前无法在iPhone上使用,但是.showWebPage()可以(或者,如果您希望在iPhone上使用openExternal()功能,我想您可以在锚点上设置target =“ _ blank”标记,对于不支持该标记的平台(例如Android),只能使用preventDefault()。
关于ios - Cordova 2.2 + ChildBrowser 3.0.4 + iOS ==失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13463030/