Cordova Iframe问题

时间:2016-11-07 10:53:28

标签: android cordova authentication iframe whitelist

自从使用Cordova版本6以来,使用Iframe时遇到了一些重大问题。我调用的Iframe-URL在每个浏览器中运行正常,也可以在模拟器上的cordova-app中运行。但在真实设备上,使用这个Iframe时我遇到了一个非常大的问题。

我在做什么: 通过Single API连接到Qlik Sense Server(Qlik是商业智能软件),使用如下链接:

https://my-server.com/single/?appid=bba3d39c-4570-4056-8d49-5b64405647d8&sheet=kwZkH&select=clearall&opt=debug

因为我还没有登录,我会自动路由到这个身份验证网站:

https://my-server.com:4244/form/?targetId=a0553562-06f5-4c5b-b4ba-69b6859d0cef

成功登录后,网址将返回单一API网址,并通过会话的qlikTicket进行扩展。

https://my-server.com/single/?appid=bba3d39c-4570-4056-8d49-5b64405647d8&sheet=kwZkH&select=clearall&opt=debug&qlikTicket=S_SPh6fvNkTecbz9

那么我的真正问题是什么?由于使用最新的Cordova版本6,从身份验证到原始单一URL的重定向崩溃。会话启用不到一秒钟,然后让我回到身份验证站点。

此问题仅发生在真正的Android设备上。在浏览器中使用此链接,有效。在浏览器中使用iframe,有效。在Android模拟器上试用cordova应用程序,一切正常!在真正的Android设备上试用cordova应用程序,无效

出了什么问题? 如果在URL中持有qlikTicket有任何问题吗?因为我直接被重定向到认证站点。

我知道自Cordova 5以来有一个新的安全模型。所以我已经实现了cordova-whitelist-plugin并授予所有访问意图,导航和访问的权限,正如您在此处所见在我的 config.xml

    <widget id="de.inform.feliosmobile4" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>FELIOSMobile</name>
<description>
    A sample Apache Cordova application that responds to the deviceready event.
</description>
<icon src="res/icon.png" platform="android" width="57" height="57" density="mdpi" />
<author email="dev@cordova.apache.org" href="http://cordova.io">
    Apache Cordova Team
</author>
<content src="index.html" />
<plugin name="cordova-plugin-whitelist" source="npm" spec="1.3.0" />
<allow-navigation href="*" />
<allow-intent href="*" />
<access origin="*" />

这就是我的 index.html 的样子(iframe是在代码末尾构建的):

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="format-detection" content="telephone=no" />
        <meta name="msapplication-tap-highlight" content="no" />
        <meta http-equiv="Content-Security-Policy" content="default-src 'self'; frame-src 'self' https://*/*">
        <!-- WARNING: for iOS 7, remove the width=device-width and height=device-height attributes. See https://issues.apache.org/jira/browse/CB-4323 -->
        <title>BeaconRanging</title>    
        <link rel="stylesheet" type="text/css" href="css/test.css">       
        <script type="text/javascript" src="jquery/jquery.js"></script>
        <script type="text/javascript" src="js/index.js"></script>      
        <script type="text/javascript" src="cordova.js"></script> 

    </head>
    <body>



    <!--    MONTAGE     -->
    <div class="popup" id="popupMONTAGE">
        <center>
            <div class="btnMachineGroup">Bitte Maschine wählen:</div>
            <br />
            <button class="btnMachineGroup" onclick="setRessource(421,'MONTAGE')">Montage Metall WA</button>
            <br />
            <button class="btnMachineGroup" onclick="setRessource(423,'MONTAGE')">Montage Metall AGW</button>
            <br />
            <button class="btnMachineGroup" onclick="setRessource(422,'MONTAGE')">Montage Metall GBK</button>
            <br />
            <button class="btnMachineGroup" onclick="setRessource(427,'MONTAGE')">Montage Spezialbohrkopf</button>
            <br />
            <button class="btnMachineGroup" onclick="setRessource(824,'MONTAGE')">Montage Service Metall</button>
            <br />
            <br />
            <button class="btnMachineGroup" onclick="hidePopup('MONTAGE')">Schliessen</button>
        </center>
    </div>

    <br /><br />
    <div class="container">
        <iframe id="qlikframe" src="https://my-server.com/single/?appid=bba3d39c-4570-4056-8d49-5b64405647d8&sheet=kwZkH&select=clearall&opt=debug"></iframe>
    </div>

    </body>
</html>

那么有人知道这里发生了什么,为什么?我已经联系过Qlik的支持。 Qlik方面没有问题。

... 使用cordova版本4,所有内容都运行良好,我没有没有问题。在cordova 6中构建相同的代码,应用程序无法正常运行。

您可以在Cordova-App的LOG文件中找到以下内容:

11-07 13:40:39.855 13009 13009 I chromium: [INFO:CONSOLE(44)] "TypeError: Cannot redefine property: qlikTicket

看起来,URL中的额外auth-info(qlikTicket)会丢失。如何防止这种情况?

0 个答案:

没有答案