javascript - 为什么 PhoneGap inAppBrowser 事件仅在第二次触发?

标签 javascript android jquery cordova

以下代码来自phonegap官方网站。这不起作用。

<!DOCTYPE html>
<html>
  <head>
    <title>InAppBrowser.addEventListener Example</title>

    <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
    <script type="text/javascript" charset="utf-8">

    // Wait for Cordova to load
    //
    document.addEventListener("deviceready", onDeviceReady, false);

    // Cordova is ready
    //
    function onDeviceReady() {
         var ref = window.open('http://apache.org', '_blank', 'location=yes');
         ref.addEventListener('loadstart', function() { alert('start: ' + event.url); });
         ref.addEventListener('loadstop', function() { alert('stop: ' + event.url); });
         ref.addEventListener('exit', function() { alert(event.type); });
    }

    </script>
  </head>
  <body>
  </body>
</html>

在此之后,我制作了一个按钮。单击按钮然后打开应用程序内浏览器。

function onDeviceReady() {
   $('#btn').click(function(){
       var ref = window.open('http://apache.org', '_blank', 'location=yes');
       ref.addEventListener('loadstart', function() { alert('start: ' + event.url); });
       ref.addEventListener('loadstop', function() { alert('stop: ' + event.url); });
       ref.addEventListener('exit', function() { alert(event.type); });
   });
}

当我第一次点击按钮时,没有任何警报。所以我单击“完成”按钮关闭浏览器。然后我第二次单击该按钮,警报开始工作。我重新部署该程序并重复此操作。结果是相同的,只有当我第二次单击按钮时才会触发警报。有人能告诉我为什么吗?

最佳答案

试试这个: 这可能是因为您在 click 函数中声明 var ref

<!DOCTYPE html>
<html>
  <head>
    <title>InAppBrowser.removeEventListener Example</title>
    <script type="text/javascript" charset="utf-8" src="jquery.js"></script>
    <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
    <script type="text/javascript" charset="utf-8">

    // Wait for device API libraries to load
    //
    document.addEventListener("deviceready", onDeviceReady, false);

    // Global InAppBrowser reference
    var ref= null;

    function iabLoadStart(event) {
        alert(event.type + ' - ' + event.url);
    }

    function iabLoadStop(event) {
        alert(event.type + ' - ' + event.url);
    }

    function iabLoadError(event) {
        alert(event.type + ' - ' + event.message);
    }

    function iabClose(event) {
         alert(event.type);
         ref.removeEventListener('loadstart', iabLoadStart);
         ref.removeEventListener('loadstop', iabLoadStop);
         ref.removeEventListener('loaderror', iabLoadError);
         ref.removeEventListener('exit', iabClose);
    }

    // device APIs are available
    //
    function onDeviceReady() {
      $('#btn').click(function(){
         ref= window.open('http://apache.org', '_blank', 'location=yes');
         ref.addEventListener('loadstart', iabLoadStart);
         ref.addEventListener('loadstop', iabLoadStop);
         ref.removeEventListener('loaderror', iabLoadError);
         ref.addEventListener('exit', iabClose);
       });
    }

    </script>
  </head>
  <body>
   <button id='btn'>click me</button>
  </body>
</html>

关于javascript - 为什么 PhoneGap inAppBrowser 事件仅在第二次触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19566716/

相关文章:

javascript - 使用 Chrome 检测 Windows 8+ 中的自定义协议(protocol)处理程序

javascript - 网页优化: Should CSS and JS be inserted into the HTML resource after minification?

javascript - 当第一个站点无法加载时使用 js 重定向站点

javascript - Gmail Chrome 扩展和 document.readyState

javascript - 想要打印带有外部样式表的 div 部分

Android - 包名称约定

java - Android:Outputstream.write - 问题

android - 当 viewpager 更改时关闭 Context Actionbar

javascript - 单击 1 次后灰色按钮 - HTML/CSS/JS

javascript - 适合 map 以始终显示世界