node webkit:在浏览器中打开数千个 url

node webkit: open thousands of urls in browser

我正在使用以下代码片段在默认浏览器中打开 link。

<template>
  <div>
     <a @click.prevent="fireUpLink">External Link</a>
  </div>
</template>

.

<script>
    /* global nw */
    export default {
      methods: {
        fireUpLink: function() {
          nw.Shell.openExternal("http://example.com/");
        }
      }
    };
    </script>

但是假设我有数千个 link,则此解决方案不可扩展。有没有更好的方法?

在Vue SFC中,它期望引用变量在组件中定义或导入,或者是全局的。如果您从全局 window 对象引用它,它应该可以工作。

window.nw.Shell.openExternal('http://example.com');

对于 Vue,如 Max 所示,<a @click.prevent="window.nw.Shell.openExternal('http://example.com')">Link</a> 有效。

您也可以只创建一个组件:

<template>
  <a
    :href="url"
    class="link"
    @click.prevent="openExternal"
  ><slot></slot></a>
</template>
<script>
export default {
  name: 'ExternalLink',
  props: {
    url: {
      type: String,
      required: true
    }
  },
  methods: {
    openExternal: function () {
      window.nw.Shell.openExternal(this.url);
    }
  }
};
</script>

然后像这样引用它:

<external-link url="http://example.com">Link</external-link>

或者,您可以创建一个包含 openExternal 方法的 mixin,并在所有组件中全局安装它,这样您就可以 <a @click.prevent="openExternal('http://example.com')>


如果您使用的不是 Vue,它不使用虚拟 DOM,那么您可以只添加一个 class="external-link",然后使用该 class 定位页面上的所有元素] 并处理它们。

$('.external-link').click(function (evt) {
  // Prevent the link from loading in NW.js
  evt.preventDefault();
  // Get the `href` URL for the current link
  let url = $(this).attr('href');
  // Launch the user's default browser and load the URL for the link they clicked
  window.nw.Shell.openExternal(url);
});