4

Windows 7 x64、nwjs 0.19.4

トレイへの最小化は window.location.href を設定しなくても正常に動作しますが、nwjs を設定するとトレイに最小化されません。

リクエストごとに改訂されたコード:

index.html

<html>
<body>
<div></div>
<script>

  // Load library
  var gui = require('nw.gui');

  // Reference to window and tray
  var win = gui.Window.get();
  var tray;

  onload = function () {
    window.location.href = "http://iheartradio.com"
  };

  // Get the minimize event
  win.on('minimize', function () {
    // Hide window
    win.hide();

    var tray = new nw.Tray({
      title: 'Web Music Player',
      icon: 'img/music.png'
    });

    // Show window and remove tray when clicked
    tray.on('click', function () {
      win.show();
      this.remove();
      tray = null;
    });
  });


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

パッケージ.json

{
  "name": "webmusicplayer",
  "version": "0.1.0",
  "main": "index.html",
  "single-instance": true,
  "window": {
    "title": "webmusicplayer",
    "min_width": 1200,
    "min_height": 600
  },
  "webkit": {
    "plugin": true
  },
  "chromium-args": "--load-plugin=ffmpegsumo.dll --child-clean-exit --disable-direct-composition --allow-running-insecure-content --no-proxy-server --enable-video-player-chromecast-support"
  }
4

2 に答える 2

1

コードの主な問題は、window.location を使用してリロードした後にウィンドウ オブジェクトに最大化イベントを登録しているため、JavaScript コードが削除され、ガベージ コレクションが行われることです。

リロードのたびに js コードを挿入する必要があります 。package.json のinject_js_startまたはinject_js_end 構成を使用して、リロードのたびにスクリプトが保持されるようにすることができます。

以下は、要件に応じた完全な作業コードです

home.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" /> 
    <title>Tray Demo</title>

    <script type="text/javascript">
    console.log('redirecting the page');
        window.location.href = 'http://www.microsoft.com';
    </script>
</head>
<body>
    <p>redirecting the page...</p>
</body>
</html>

パッケージ.json

{
  "main": "home.html",
  "name": "tray-demo",
  "description": "tray demo for windows",
  "version": "1.0",
  "inject_js_start": "NWInit.js",
  "window": {
    "title": "Tray Demo",
    "resizable": true,
    "show_in_taskbar": true
  },
  "webkit": {
    "plugin": true
  },
  "node-remote": "*://*"
}

NWInit.js

if(typeof nw != 'undefined') {
    NWInit = {
        initApp: function() {
            console.log('init app called');

            var win = nw.Window.get();
            win.showDevTools();

            win.on('minimize', function() {
                console.log('minimize called');

                if(typeof nw.Tray == 'undefined') {
                    return;
                }

                win.hide();

                var tray = new nw.Tray({
                    title: 'Web Music Player',
                    icon: 'img/music.png'
                });

                tray.on('click', function() {
                    console.log('tray clicked');

                    win.show();

                    tray.remove();
                    tray = null;
                });
            });
        }
    };

    NWInit.initApp();
}
于 2017-01-11T19:09:35.120 に答える
0

私も同じ問題を抱えていました。iFrame の代わりに webview タグを使用すると、リロードの問題が解決するようです。

https://nwjs.readthedocs.io/en/nw13/References/Frames/

于 2018-11-01T17:33:29.703 に答える