我正在研究Android和iOS的应用程序,它将打开外部链接。我目前正在使用cordova-plugin-inappbrowser 1.0.1来打开我的链接,它在Android中完美运行,但我似乎遇到了许多其他人都遇到的问题。在iOS中,我没有出现工具栏,因此我无法点击"完成"按钮(或后退/前进按钮。)我使用phonegap build online和命令行工具构建了应用程序,每个实例都有相同的行为。它在模拟环境或本机设备环境中不起作用。我一直在网上搜索,这似乎是一个非常普遍的问题,但是所提出的解决方案都没有在过去2天和大约15个小时的测试中工作(只是一个愚蠢的小链接!)我想留在 - 应用程序,但如果这是唯一的解决方案,不会反对去safari。我的相关代码和版本: Phonegap cli-5.1.1(iOS 3.8 / Android 4.02) 科尔多瓦3.5.0-0.2.7 cordova-plugin-inappbrowser 1.0.1
config.xml相关代码:
<plugins>
<plugin name="InAppBrowser" value="CDVInAppBrowser" />
</plugins>
<feature name="InAppBrowser">
<param name="ios-package" value="CDVInAppBrowser" />
</feature>
的index.html:
<link rel="stylesheet" href="themes/jquery.mobile.icons.min.css" />
<link rel="stylesheet" href="jquery/jquery.mobile.structure-1.4.5.min.css" />
<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<script src="jquery/jquery-2.1.4.min.js"></script>
<script src="jquery/jquery.mobile-1.4.5.min.js"></script>
<script src="phonegap.js"></script>
<script src="cordova.js"></script>
<script src="cordova_plugins.js"></script>
<script type="text/javascript" charset="utf-8">
// Wait for Cordova to load
//
document.addEventListener("deviceready", onDeviceReady, false);
// Global InAppBrowser reference
var iabRef = null;
function iabLoadStart(event) {
alert(event.type + ' - ' + event.url);
}
function iabLoadStop(event) {
alert(event.type + ' - ' + event.url);
}
function iabClose(event) {
alert(event.type);
iabRef.removeEventListener('loadstart', iabLoadStart);
iabRef.removeEventListener('loadstop', iabLoadStop);
iabRef.removeEventListener('exit', iabClose);
}
// Cordova is ready
//
function onDeviceReady() {
alert('Device is ready!');
//iabRef = window.open('http://apache.org', '_blank', 'location=yes');
//iabRef.addEventListener('loadstart', iabLoadStart);
//iabRef.addEventListener('loadstop', iabLoadStop);
//iabRef.addEventListener('exit', iabClose);
}
</script>
<style type="text/css">
.centeredImage
{
text-align:center;
margin-top:0px;
margin-bottom:0px;
padding:0px;
}
body
{
background: #000 !important;
background-image:url(backgrounds/1080widephone.png) !important;
background-size:cover !important;
}
.ui-content{
background: transparent !important;
}
.ui-page{
background: transparent !important;
}
.ui-footer{
background: transparent !important;
}
</style>
</head>
各种链接(均作为按钮):
window.open('url' ,'_blank')
(注意:这似乎在iOS的默认WebView和Android的inappbrowser中打开)
cordova.InAppBrowser.open('url' ,'_blank', 'location=yes' , 'toolbar=yes', 'toolbarposition=top' , closebuttoncaption=Return'
(注意:我在iOS或Android版本中使用此功能时没有任何反应。我的语法基于description)
我的膝盖反应是该插件没有加载,但我不知道如果它显然在Android构建中工作但不是使用完全相同的代码的iOS构建的情况在phonegap构建。非常感谢任何帮助,我觉得我在这里跑来跑去!
答案 0 :(得分:1)
我知道这是一个迟到的回应,但我找到了一个可能的解决方案。
就我而言,我在Ionic框架中使用ngCordova的$InAppBrowser
来打开文件或网址。为了测试这一点,我使用的是Xcode的iPhone模拟器以及Ionic的“Ionic View”应用程序。在这两个选项中,$InAppBrowser
都不会显示“后退”或“完成”按钮。
但是,如果您在Xcode中打开项目的.xcodeproj
并在实际的iOS设备上运行您的应用程序,InAppBrowser应该按预期工作。
我在这个问题上花了好几个小时才发现Ionic View限制了$ InAppBrowser的options
。但是,我仍然不能100%确定为什么这在iOS模拟器中不起作用。
注意:即使您直接使用Cordova而非ngCordova,我相信所有这些都适用。
答案 1 :(得分:0)
中选项字符串的值
cordova.InAppBrowser.open
需要是由
分隔的单个名称=值对的字符串所以试试:
cordova.InAppBrowser.open('url' ,'_blank', 'location=yes,toolbar=yes,toolbarposition=top,closebuttoncaption=Return');
此外,您应该确保您的应用程序的链接打开IAB,方法是劫持它们并在IAB中打开它们并禁止默认事件...例如,使用JQuery来劫持id为“infoExternalContent”的div中的所有链接,在IAB中打开它们,只为iOS设置一些选项(使用Cordova设备平台检测平台):
$('#infoExternalContent').find('a').each(
function() {
var href = $(this).attr('href');
var iabOptions = (device.platform === 'iOS' ? 'location=no,enableViewportScale=yes,transitionstyle=fliphorizontal' : '');
if (href.indexOf('http') === 0) {
$(this).click(function(e) {
e.preventDefault();
cordova.InAppBrowser.open(''.concat(this.href), '_blank', iabOptions);
});
}
}
);
答案 2 :(得分:0)
我不使用phonegap构建,但我无法想象它想要所有这些加载......
<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<script src="jquery/jquery-2.1.4.min.js"></script>
<script src="jquery/jquery.mobile-1.4.5.min.js"></script>
<script src="phonegap.js"></script>
<script src="cordova.js"></script>
<script src="cordova_plugins.js"></script>
cordova.js与phonegap.js一起加载两次。只是说'
答案 3 :(得分:0)
如果取消注释
iabRef = window.open('http://apache.org', '_blank', 'location=yes');
会发生什么?
我也会尝试
cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
如果这些都没有打开apache的窗口,我会读取插件。