2016-11-23 46 views
0

我在Visual Studio 2015中爲Cordova使用了InAppBrowser插件。是否可以在應用程序中運行此瀏覽器?目前,我的代碼啓動URL在Edge的新實例:Cordova Windows Phone通用InAppBrowser內應用程序可能嗎?

我用下面的替換window.open:

function onDeviceReady() { 
    window.open = cordova.InAppBrowser.open; 
}; 

我啓動URL具有以下:

ref = window.open(
    url, 
    '_system', 
    'location=no,hidden=yes'); 

_system似乎會導致Edge的新實例打開。如果我用別的(如_self,_blank)我得到以下錯誤:

The app can’t use script to load the (URL here) url because the url launches another app. Only direct user interaction can launch another app 

我希望能有應用程序內運行的瀏覽器,使旅途渾然一體。

謝謝。

回答

0

這是我的解決方案。

還有3分我拿起:

  1. jQuery Mobile的需要,否則我得到一個空白屏幕

  2. 用於綁定的loadstop目標_blank。使用_self打破了loadstop事件。

  3. 需要以下CSS類,以確保InAppBrowser不會對Windows設備

    .inAppBrowserWrap { 
        border: 0 !important; 
    } 
    

我已經截斷了一些爲清楚起見,代碼的一個巨大的邊界。

的HTML

<!DOCTYPE html> 
    <html> 
    <head>   
     <meta name="format-detection" content="telephone=no"> 
     <meta name="msapplication-tap-highlight" content="no"> 
     <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width"> 
     <link rel="stylesheet" type="text/css" href="css/index.css"> 
     <title>BlankCordovaApp1</title> 

     <script type="text/javascript" src="cordova.js"></script> 
     <script type="text/javascript" src="scripts/platformOverrides.js"></script> 
     <script type="text/javascript" src="scripts/jquery-mobile/scripts/jquery-1.8.0.min.js"></script> 
     <script type="text/javascript" src="scripts/jquery-mobile/scripts/jquery.mobile-1.4.5.min.js"></script> 
     <script type="text/javascript" src="scripts/index.js"></script> 

    </head> 
    <body> 
     <div id="MainContent"> 
      <label>Login here</label> 
      <input type="text" id="txtUserName" /> 
      <input type="text" id="txtPassword" /> 
      <button type="button" id="btnLogin">Login</button> 
      <div id="Message"> 
      </div> 
     </div> 
    </body> 
</html> 

的JS

(function(){ 
    "use strict"; 

    var ref = null; 
    var apiUrl = 'http://192.168.1.3:3000/Api/MobileLogin'; 

    document.addEventListener('deviceready', onDeviceReady.bind(this), false); 

    function onDeviceReady() { 
     window.open = cordova.InAppBrowser.open; 

     document.getElementById('btnLogin').addEventListener('click', login); 
    }; 

    function login() { 
     // disable login button 
     var loginButton = this; 
     loginButton.disabled = true; 

     $.ajax({ 
      url: apiUrl, 
      type: 'post', 
      data: { Email: $('#txtUserName').val(), Password: $('#txtPassword').val() }, 
       success: function (url) { 
        LaunchBrowser(url); 

       // re-enable the button 
       loginButton.disabled = false; 
      } 
     }); 
    }; 

    function LaunchBrowser(url) { 

     // _blank must be used in order for loadstop to trigger 
     ref = window.open(
      url, 
      '_blank', 
      'location=no,hidden=no'); 

     ref.addEventListener('loadstop', function (e) { 
      if (e.url.match('MobileClose')) { 
       ref.close(); 
      } 
     }); 

    }; 

})(); 

在Web API返回的手機打一個令牌(1分鐘後到期)的URL。這將用戶登錄並設置會話變量「OnMobile」。

當用戶通過網絡註銷時,用戶被重定向到「MobileClose」,因爲「OnMobile」爲真。這告訴應用關閉InAppBrowser。

相關問題