【问题标题】:How to make HTML open a hyperlink in another window?如何让 HTML 在另一个窗口中打开超链接?
【发布时间】:2017-09-06 02:13:28
【问题描述】:

我有以下:

<p class="bigfont">
    <img width="4%" src="images/Youtube.png" class="float-left"/ >
    <a href="\\OC2-RMGFS\Public\Safety\runhidefight-eng.wmv" target="_blank" title="Response to an Active Shooter Emergency"><h6> FBI Video: Run. Hide. Fight. Surviving an Active Shooter Event</h6></a>
</p>

根据我的理解,target="_blank" 将在新窗口中显示视频。然而事实并非如此。会发生什么是它打开 Window 媒体播放器来播放视频。我希望视频在无窗口窗口上播放。我怎样才能做到这一点?

【问题讨论】:

  • 此链接的功能将取决于浏览器。并非所有浏览器都可以直接在浏览器窗口中显示视频。此外,HTML5 不支持 wmv(Windows 媒体视频)格式,这可以解释为什么它在 Windows 上的 WMP 中打开。
  • “但事实并非如此” — 虽然告诉我们您没有观察到的预期行为很有用,但好的问题陈述会告诉我们您实际观察到的行为
  • 您的 HTML 中有错误。代码生成的 DOM 很奇怪。 Use a validator.
  • “一个没有窗户的窗户”——一个whowhatnow?

标签: javascript html css


【解决方案1】:

WMV 在浏览器中不是format supported by the HTML5 video player。您应该尝试将视频转换为支持格式,例如 h264 (mpeg) 或 webm。

最重要的是,您可能希望创建一个实际的player.html 页面,您可以在新打开的窗口中加载该页面,以便您能够配置自动播放、哪些播放器控件可见等设置。这可以还让您有机会允许视频格式回退,以防其中一种编码的视频格式不支持,将选择另一种。

您可以通过在 URL 中传递一个查询字符串参数来告诉播放器页面要加载哪个视频,从而避免为每个视频创建单独的播放器页面。

【讨论】:

    【解决方案2】:

    看来你这里有一些问题。

    强制浏览器在新窗口中打开链接

    重要的是要注意,弄乱预期的浏览器行为在道德上是错误的。您应该始终让用户决定他希望如何打开特定链接。

    但是,如果您真的需要知道,这就是答案。过去,target="_blank" 属性用于在新窗口中打开链接(和表单),但现在不再使用了。由于浏览器变得更加友好,它只会在新标签页中打开结果。

    如果你想强制浏览器在新窗口中打开一个链接,你需要使用window.open()函数。但是,我求求你,不要把它扔得太多。如果你绝对需要实现这个功能,至少让它不那么邪恶,如下所示(所以你只添加一个类 .new-window 没有丑陋的onclick-s 或类似的东西:

    (function(){
      var links = document.querySelectorAll('a.new-window');
      for (var i = 0; i < links.length; ++i) {
        links[i].addEventListener('click', function(e) {
          e.preventDefault();
          // Note that it'll not work inside SO snippets preview because of the sandbox!
          // Try on http://codepen.io/xerif/pen/JWggoJ
          window.open(this.getAttribute('href'), '', [
            'width=' + screen.availWidth,
            'height=' + screen.availHeight
          ]);
          // Also note that array will be converted to proper string automagically
          // I used array for readability
        });
      }
    })();
    <a href="http://stackoverflow.com/q/43333255">Normal link</a> / 
    <a href="http://stackoverflow.com/q/43333255" target="_blank">Open in a new tab (probably)</a> /
    <a href="http://stackoverflow.com/q/43333255" class="new-window">Open in a new window</a>

      ▲try it on codepen.io(SO上的sn-ps是沙盒的)

    值得注意的是,window.open 不应被弹出窗口阻止程序阻止,只要窗口源自用户的操作。但是,如果您尝试在没有用户启动该操作的情况下打开一个窗口(通过计时器或键盘事件等静默方式),它将被阻止。

    不支持的媒体类型

    正如其他人所暗示的那样,网络环境中没有 Windows Media Player 之类的东西。它只是不存在。忘记你知道的。去做吧。

    相反,您可能想要使用video tag。据我了解,FBI 禁止您将培训视频放在 YouTube 上,因此您需要将它们转换为更合适的格式,例如 webmh.264。那么:

    <video src="\\OC2-RMGFS\Public\Safety\runhidefight-eng.mp4" poster="./images/Youtube.png">
      We can't play this video in your browser. Can you <a href="\\OC2-RMGFS\Public\Safety\runhidefight-eng.mp4" download>download it</a>?
    </video>

    【讨论】:

      【解决方案3】:

      target="_blank" 是一种不可靠的打开新窗口的方式。它可能会打开一个新标签。这完全由浏览器控制。

      一个技巧是window.open() 总是会打开一个新窗口,而不是一个标签,如果你给它一个宽度参数:window.open('https://www.google.com','','width=100')

      如果你不考虑宽度,它也可能会打开一个标签。

      【讨论】:

      • window.open() 很可能被浏览器内置的弹出窗口阻止程序阻止。 target="_blank" 更可靠,因为它允许用户选择链接的打开方式和不被阻止的方式。
      • 同意它可能被弹出窗口阻止程序阻止,不同意 _blank 是可靠的,因为它在浏览器中的行为不一致。鉴于 OP 的要求,_blank 不是正确的实现。
      猜你喜欢
      • 2011-01-21
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多