cordova inappbrowser iOS问题

时间:2015-09-15 22:38:38

标签: ios cordova

我正在研究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构建。非常感谢任何帮助,我觉得我在这里跑来跑去!

4 个答案:

答案 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的窗口,我会读取插件。