天道酬勤,学无止境

打开新浏览器窗口的最佳方式是什么?(What's the best way to open new browser window?)

问题

我知道大多数链接应该由最终用户决定如何打开,但我们不能否认有时您几乎“不得不”进入一个新窗口(例如在表单中维护数据)在当前页面)。

我想知道关于在新浏览器窗口中打开链接的“最佳”方式的共识是什么。

我知道<a href="url" target="_blank">已经过时了。 我也知道<a href="#" onclick="window.open(url);">由于各种原因并不理想。 我还尝试用<span onclick="window.open(url);">类的东西完全替换锚点,然后将 SPAN 样式化为看起来像一个链接。

我倾向于使用的一种解决方案是<a href="url" rel="external">并使用 JavaScript 在标记为“external”的锚点上将所有目标设置为“_blank”。

还有其他想法吗? 什么更好? 我正在寻找最符合 XHTML 和最简单的方法来做到这一点。

更新:我说 target="_blank" 不是,因为我在几个地方读到 target 属性将被 XHTML 淘汰。

回答1

我正在使用您提出的最后一种方法。 我添加 rel="external" 或类似的东西,然后使用 jQuery 遍历所有链接并为它们分配一个点击处理程序:

$(document).ready(function() {
  $('a[rel*=external]').click(function(){
    window.open($(this).attr('href'));
    return false; 
  });
});

我发现这是最好的方法,因为:

  • 在语义上非常清楚:您有一个指向外部资源的链接
  • 它符合标准
  • 它优雅地降级(您有一个非常简单的带有常规href属性的链接)
  • 如果他们愿意,它仍然允许用户中键单击链接并在新选项卡中打开它
回答2

为什么target="_blank"是个坏主意?

它应该完全按照您的意愿行事。

编辑:(见评论)采取了点,但我确实认为使用 javascript 来完成这样的任务可能会导致一些人非常不高兴(习惯性地点击中间打开新窗口的人,以及使用 NoScript 扩展的人)

回答3

不要强行在新窗口中打开链接。

反对的理由:

  • 它违反了最不惊讶的规则。
  • 后退按钮不起作用,用户可能不知道为什么。
  • 标签式浏览器会发生什么? 新标签还是新窗口? 无论发生什么,如果混合选项卡和窗口,这是您想要的吗?

我总是听到赞成打开新窗口的原因是用户不会离开网站。 但可以肯定的是,我永远不会回到让我烦恼的网站。 如果该网站从我手中夺走了控制权,那将是一个很大的烦恼。

一种方法可能是,您提供两个链接,一个是正常的,另一个在新窗口中打开它。 在正常链接后添加带有小符号的第二个。 通过这种方式,您网站的用户可以控制他们想要点击的链接。

回答4

这是我为 jQuery 编写的插件

 (function($){  
  $.fn.newWindow = function(options) {       
    var defaults = {
        titleText: 'Link opens in a new window'     
    };

     options = $.extend(defaults, options);

     return this.each(function() {  
       var obj = $(this);

       if (options.titleText) {        
           if (obj.attr('title')) {
                     var newTitle = obj.attr('title') + ' (' 
                                                + options.titleText + ')';
           } else {
                    var newTitle = options.titleText;
           };              
           obj.attr('title', newTitle);            
       };          

       obj.click(function(event) {
          event.preventDefault();  
          var newBlankWindow = window.open(obj.attr('href'), '_blank');
          newBlankWindow.focus();
        });     
       });    
  };  
 })(jQuery); 

示例用法

$('a[rel=external]').newWindow();

您还可以通过传入一些选项来更改或删除标题文本

更改标题文本的示例:

$('a[rel=external]').newWindow( { titleText: 'This is a new window link!' } );

将其全部删除的示例

$('a[rel=external]').newWindow( { titleText: '' } );
回答5

也许我误解了一些东西,但你为什么不想使用 target="_blank"? 我就是这样做的。 如果您正在寻找最兼容的,那么任何类型的 JavaScript 都会被淘汰,因为您无法确定客户端是否启用了 JS。

回答6
<a href="http://some.website.com/" onclick="return !window.open( this.href );">link text</a>

详细信息在我对另一个问题的回答中有所描述。

回答7
<a href="http://www.google.com" onclick="window.open(this.href); return false">

如果用户禁用了 JS,这仍然会打开链接(尽管在同一个窗口中)。 否则它的工作方式与 target=blank 完全一样,而且它很容易使用,因为您只需将 onclick 函数(可能通过使用 JQuery)附加到所有普通标签。

回答8

如果您使用任何严格的 doctype 风格或即将到来的真正 xhtml 风格,则不允许使用目标......

使用过渡,无论是 HTML4.01 还是 XHTML1,您都可以使用 Damirs 解决方案,尽管它无法实现 window.open() 中必需的 windowName-property:

在纯 html 中:

<a href="..." target="_blank" onclick="window.open(this.href, 'newWin'); return false;">link</a>

但是,如果您使用严格的文档类型之一,则打开链接的唯一方法是使用此解决方案而不使用目标属性...

-- 顺便说一下,非 js 浏览器的数量经常被误算,查找计数器数字指的是非常不同的数字,我想知道这些非 js 浏览器中有多少是爬虫之类的!-)

回答9

如果我在表单页面上单击 moreinfo.html 链接(例如)会导致我丢失数据,除非我在新选项卡/窗口中打开它,请告诉我。

您可以欺骗我使用 window.open() 或 target="_blank" 打开一个新选项卡/窗口,但我可能禁用了目标和弹出窗口。 如果需要 JS、目标和弹出窗口来欺骗我打开一个新窗口/选项卡,请在我开始使用表单之前告诉我。

或者,将到另一个页面的链接作为表单请求,这样当访问者提交时,当前表单数据将被保存,以便他们可以从上次继续(如果可能)。

回答10

我用这个...

$(function() {
  $("a:not([href^='"+window.location.hostname+"'])").click(function(){
    window.open(this.href);
    return false;
  }).attr("title", "Opens in a new window");
});

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 与使用Python与已打开的本机OS对话框(如(另存为AS))进行交互的最佳方法是什么?(Which is the best way to interact with already open native OS dialog boxes like (Save AS) using Python?)
    问题 使用PyWind32类的任何Python模块与“另存为”框等现有的本机OS对话框进行交互,是否有任何有效的方法? 我尝试在Google上搜索,但没有帮助。 编辑: 1:当用户单击Web应用程序上的“另存为”对话框时,将触发“另存为”对话框。 2:欢迎提出任何建议来处理已使用Python触发的任何本机OS对话框。(不必特定于Selenium Webdriver,我正在寻找通用建议。) (当我发布问题时,我认为通过“与对话框交互”将隐含意味着它是现有的,就好像我能够创建一个对话框一样,然后可以在程序控制下与之交互。阅读了前2个答案后,我意识到我并不清楚。这就是为什么EDIT) 谢谢 回答1 在为此寻找可能的解决方案时,我遇到了关于SO或其他方面的几种解决方案。 其中一些使用AutoIT ,或编辑浏览器配置文件以使其直接存储文件而没有提示。 我发现所有这些解决方案都太具体了,以至于您可以通过编辑浏览器配置文件来解决“另存为”对话框的问题,但是如果以后需要处理其他窗口,则会陷入困境。 因为使用AutoIT是过大的,这直接冲突了我选择Python来完成此任务的事实。 (我的意思是, Python本身是如此强大,取决于其他工具,对于任何Pythonist来说都是严格的NO NO NO) 因此,在长期寻找这一问题的可能的通用解决方案之后
  • 使用Selenium的WindowHandles跟踪和迭代选项卡和窗口的最佳方法(Best way to keep track and iterate through tabs and windows using WindowHandles using Selenium)
    问题 我们正在与Selenium Webdriver一起为Internet Explorer 11进行UI测试。在经过测试的Web应用程序中,弹出几个屏幕。 在几次测试中,我们最终得到三个浏览器窗口,因此还有三个Driver.WindowHandles。 要从一个WindowHandle切换到另一个WindowHandle,我们希望将Driver.WindowHandles排序为最旧的窗口优先,最新的窗口最后。 但是事实并非如此:这完全是随机的! 因为windowhandle是GUID,所以我们最终以WindowHandle GUID为键创建了一个字典,该字典具有在浏览器窗口中加载的页面类型的值。 但这还导致例如在关闭窗口时维护字典。 对于这样一个简单的问题,这似乎是很多工作。 有更好的解决方案吗? 回答1 您说的很正确: WindowHandles的排序方式将最旧的窗口排在最前面,最新的窗口排在最后。 但是事实并非如此:这完全是随机的! 在讨论中,Simon明确提到: While the datatype used for storing the list of handles may be ordered by insertion, the order in which the WebDriver implementation iterates over the window
  • 在不离开页面的情况下打开下载窗口的最简单方法(Easiest way to open a download window without navigating away from the page)
    问题 跨浏览器打开下载对话框的最佳方法是什么(假设我们可以在标题中设置content-disposion:attachment)而无需离开当前页面或打开弹出窗口,而这在Internet Explorer(IE)中效果不佳)6。 回答1 7年过去了,我不知道它是否适用于IE6,但这会在FF和Chrome中提示OpenFileDialog。 var file_path = 'host/path/file.ext'; var a = document.createElement('A'); a.href = file_path; a.download = file_path.substr(file_path.lastIndexOf('/') + 1); document.body.appendChild(a); a.click(); document.body.removeChild(a); 回答2 这个javascript很不错,它不会打开新的窗口或标签。 window.location.assign(url); 回答3 我知道这个问题是在7 years and 9 months ago但是许多发布的解决方案似乎都行不通,例如,使用<iframe>仅适用于FireFox ,而不适用于Chrome 。 最佳解决方案:
  • 在带有参数的MVVM Light中打开新窗口的最佳实践(Best Practice to open a New Window in MVVM Light with Parameters)
    问题 我对mvvm和mvvm light相当陌生,但我想我了解它的大致概念。 我不了解是否要打开新窗口,但是该窗口需要调用者提供的数据,什么是将数据获取到新窗口的最佳实践? 如果我将数据传递给构造函数,则意味着我需要后面代码中的代码才能将其传递给视图模型。 我不能使用消息传递,因为它不是基本数据。 回答1 一种流行的选择是使用将创建视图/视图模型并显示新视图的服务类。 您的视图模型构造函数和/或方法/属性可以从调用方接收数据,然后在将其显示在屏幕上之前,将视图绑定到该视图模型。 这是DialogService的非常简单的实现: public class DialogService : IDisposable { #region Member Variables private static volatile DialogService instance; private static object syncroot = new object(); #endregion #region Ctr private DialogService() { } #endregion #region Public Methods public void ShowDialog(object _callerContentOne, object _callerContentTwo) {
  • 将 Web 应用程序加载为 Windows 桌面应用程序的简单/最佳方法?(Simple/Best way to load Web App as Windows Desktop Application?)
    问题 您好,我有一个使用 html5/php 等构建的网络应用程序。它是一个音乐播放器,类似于 Spotify 和 Pandora。 我想将 Web 应用程序作为桌面应用程序分发,以便人们可以直接从桌面运行它,而无需打开浏览器。 我不喜欢像系统这样的浏览器,只需要加载 web 视图(类似于在 iOS 中加载 web 视图)(没有标签没有 url 栏等) 我听说过 Prism,但它已停产,而且我在任何地方都找不到下载链接。 你有什么建议吗? 对于 Mac Os X,我找到了 FluidApp,它似乎运行良好,因为它构建了一个独立的应用程序。 对于 iOS,我可以简单地通过 webview 加载 web 应用程序,它运行良好,正是我所需要的。 对于android,我基本上也加载了一个webview。 Windows 只是让我通过一个独立的桌面应用程序加载 web 应用程序。 因此,如果有人可以帮助我,将不胜感激! 回答1 一个简单的 VB.NET 应用程序应该可以解决问题。 只需创建一个新的 Windows Froms 项目,双击表单,将所有内容标记为粘贴: Public Class Form1 '############## Settings ##############' 'Change to your URL Dim url As String = "http://google
  • target =“ _ blank”与target =“ _ new”(target=“_blank” vs. target=“_new”)
    问题 <a target="_new">和<a target="_blank">之间有什么区别?如果我只想在新标签页/窗口中打开链接,应该使用哪一个? 回答1 使用“ _blank” 根据HTML5规范: 有效的浏览上下文名称是任何包含至少一个不以U + 005F LOW LINE字符开头的字符的字符串。 (以下划线开头的名称保留用于特殊关键字。) 有效的浏览上下文名称或关键字是任何字符串,既可以是有效的浏览上下文名称,也可以是_blank,_self,_parent或_top之一的ASCII不区分大小写的匹配。”-源 这意味着在HTML5中没有诸如_new这样的关键字,在HTML4(因此也没有XHTML)中也没有。 这意味着,如果将其用作目标属性的值,则不会有任何一致的行为。 安全建议 正如Daniel和Michael在评论中指出的那样,当使用目标_blank指向不受信任的网站时,还应该设置rel="noopener" 。 这样可以防止打开站点通过JavaScript破坏打开器。 有关更多信息,请参见此帖子。 回答2 当用户单击链接时,使用target="_blank"将指示浏览器创建新的浏览器选项卡或窗口。 根据规范,使用target="_new"在技​​术上是无效的,但据我所知,每个浏览器的行为都相同: 它将搜索上下文名称为“ _new”的标签或窗口如果找到“ _new”标签
  • 打开文件以使用Python进行独占访问的最佳方法是什么?(What is the best way to open a file for exclusive access in Python?)
    问题 解决此问题的最优雅的方法是什么: 打开文件进行读取,但前提是该文件尚未打开以进行写入打开文件进行写入,但前提是尚未打开文件进行读取或写入 内置函数的工作方式如下 >>> path = r"c:\scr.txt" >>> file1 = open(path, "w") >>> print file1 <open file 'c:\scr.txt', mode 'w' at 0x019F88D8> >>> file2 = open(path, "w") >>> print file2 <open file 'c:\scr.txt', mode 'w' at 0x02332188> >>> file1.write("111") >>> file2.write("222") >>> file1.close() scr.txt现在包含“ 111”。 >>> file2.close() scr.txt已被覆盖,现在包含“ 222”(在Windows上为Python 2.4)。 该解决方案应该在同一进程内工作(例如上例),并且在另一个进程打开文件时也是如此。 如果崩溃的程序无法使锁保持打开状态,则是首选。 回答1 我认为没有完全跨平台的方式。 在unix上,fcntl模块将为您完成此操作。 但是在Windows上(我假设您是通过路径访问的),您将需要使用win32file模块。 幸运的是
  • 浏览器选项卡之间的通信(communication between browser tab)
    问题 我有一个 html 页面 (main.html) 使用带有 window.open("newtab.html") 方法的 javascript 在同一个域中打开一个新选项卡。 在新选项卡中,用户可以通过单击按钮来结束其活动。 在这一点上,我想向 opener 窗口发送一条消息。 我尝试使用 postMessage 但从新选项卡中我无法引用开启器。 从新标签我想要类似的东西,但我有“ko” var w = window.opener; if (w) { w.postMessage("hi", "http://10.150.10.43"); } else { alert("ko"); } 将消息从辅助选项卡/窗口发送到主选项卡(在同一域中)的最佳方式是什么? 非常感谢卢卡 回答1 这很奇怪。 使用window.open("newtab.html")打开一个新窗口应该使新打开的窗口能够通过window.opener引用 opener 。 无论如何,在同一个域上的两个窗口之间进行通信还有其他几种选择。 我认为以下两个是最容易实现的: 使用localStorage 。 如果你在新标签窗口中将某个key下的一些数据存储到localStorage中,那么opener窗口会得到一个storage事件。 如果使用处理程序捕获事件,则可以从新选项卡窗口写入的 localStorage 中读取数据
  • Chrome,Javascript,window.in在新标签页中打开(Chrome, Javascript, window.open in new tab)
    问题 在chrome中,这会在新标签页中打开: <button onclick="window.open('newpage.html', '_blank')" /> 这会在新窗口中打开(但我也想在新标签页中打开它: <script language="javascript"> window.open('newpage.html', '_blank'); </script> 这可行吗? 回答1 您不能直接控制它,因为它是由Internet Explorer用户控制的选项。 使用Window.open使用其他窗口名称打开页面将在新的浏览器窗口(如弹出窗口)中打开,或者在用户配置了浏览器的情况下在新选项卡中打开。 编辑: 更详细的解释: 1.在现代浏览器中,window.open将在新选项卡中打开,而不是弹出窗口。 2.您可以通过在第3个参数中指定选项来强制浏览器使用新窗口(“弹出窗口”) 3.如果window.open调用不是用户启动的事件的一部分,它将在新窗口中打开。 4. “用户启动的事件”不必具有相同的函数调用–但它必须起源于用户单击所调用的函数 5.如果用户启动的事件委托或推迟了一个函数调用(例如,在未绑定到click事件的事件侦听器或委托中,或通过使用setTimeout进行委托),则它将失去其状态为“用户发起” 6.某些弹出窗口阻止程序将允许通过用户启动的事件打开窗口
  • 在Perl中打开和读取文件的最佳方法是什么?(What's the best way to open and read a file in Perl?)
    问题 请注意-我不是在寻找“正确”的方式来打开/读取文件,也不是我应该每次打开/读取文件的方式。 我只是想了解大多数人的使用方式,也许同时学习一些新方法:)* 我的Perl程序中一个非常常见的代码块是打开文件并对其进行读写。 我已经看到了很多方法,而且几年来我执行此任务的方式也发生了变化。 我只是想知道什么是最好的方法(如果有最好的方法)? 我以前是这样打开文件的: my $input_file = "/path/to/my/file"; open INPUT_FILE, "<$input_file" || die "Can't open $input_file: $!\n"; 但是我认为错误捕获存在问题。 添加括号似乎可以解决错误陷阱: open (INPUT_FILE, "<$input_file") || die "Can't open $input_file: $!\n"; 我知道您也可以将文件句柄分配给变量,因此,可以像上面那样使用“ INPUT_FILE”,而不是使用$ input_filehandle-这样更好吗? 读取文件时,如果文件很小,那么像这样的遍历有什么问题吗? my @array = <INPUT_FILE>; 或者 my $file_contents = join( "\n", <INPUT_FILE> ); 还是应该总是像这样循环遍历: my
  • 使用MVVM在WPF中创建新窗口的最佳方法(The best approach to create new window in WPF using MVVM)
    问题 在邻居的帖子中:ViewModel应该如何关闭表单? 我已经发布了如何使用MVVM关闭窗口的愿景。 现在我有一个问题:如何打开它们。 我有一个主窗口(主视图)。 如果用户单击“显示”按钮,则应显示“演示”窗口(模态对话框)。 使用MVVM模式创建和打开窗口的首选方法是什么? 我看到两种通用方法: 第一个(可能是最简单的)。 事件处理程序“ ShowButton_Click”应在主窗口后面的代码中以以下方式实现: private void ModifyButton_Click(object sender, RoutedEventArgs e) { ShowWindow wnd = new ShowWindow(anyKindOfData); bool? res = wnd.ShowDialog(); if (res != null && res.Value) { // ... store changes if neecssary } } 如果我们应该更改“显示”按钮状态(启用/禁用),则需要添加逻辑来管理按钮状态。 源代码与“旧式” WinForms和MFC源代码非常相似-我不确定这是好是坏,请告知。 我想念的其他东西吗? 另一种方法: 在MainWindowViewModel中,我们将实现“ ShowCommand”属性,该属性将返回命令的ICommand接口。 反过来
  • 与Visual Studio集成的C#的最佳(免费?)反编译器? [关闭](Best (free?) decompiler for C# with Visual Studio integration? [closed])
    问题 关闭。 此问题不符合堆栈溢出准则。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使它成为Stack Overflow的主题。 6年前关闭。 改善这个问题 在Java开发中,Jad / JadClipse反编译器使我受益匪浅。 这样就可以知道为什么第三方库失败了,而不是通常的猜测。 我正在寻找C#和Visual Studio的类似设置。 也就是说,我可以指向代码中的任何类或变量并获得该特定类的代码视图的设置。 最佳的设置是什么? 我希望能够使用通常用于导航自己的代码的“跳转到声明/实现”。 它不是必须免费的,但是如果是的话,这将是一个额外的好处。 它应该支持Visual Studio 2008或Visual Studio 2005以及.NET 2和3(.5)。 回答1 这是一篇有关Reflector以及如何将Reflector集成到Visual Studio中的好文章。 特别有趣的是Reflector.VisualStudio加载项。 这个插件由Jaime Cansdale创建,允许将Reflector托管在Visual Studio中。 使用此加载项,您可以将Reflector集成到Visual Studio环境中。 首先,您需要在计算机上安装最新版本的Reflector。 下载Reflector后,请从http://www.testdriven.NET
  • 管理Java Servlet的数据库连接的最佳方法(Best way to manage database connection for a Java servlet)
    问题 在Java Servlet中管理数据库连接的最佳方法是什么? 当前,我只是在init()函数中打开一个连接,然后在destroy()中将其关闭。 但是,我担心“永久地”保持数据库连接可能是一件坏事。 这是处理此问题的正确方法吗? 如果没有,有什么更好的选择? 编辑:给出更多的说明:我尝试为每个请求简单地打开/关闭一个新连接,但是通过测试,我发现由于创建了太多连接而导致性能问题。 通过多个请求共享连接是否有任何价值? 此应用程序的请求几乎都是“只读”的,并且响应速度很快(尽管请求的数据很小)。 回答1 我实际上不同意使用Commons DBCP。 您应该真正依靠容器来为您管理连接池。 由于您使用的是Java Servlet,这意味着在Servlet容器中运行,而我熟悉的所有主要Servlet容器都提供连接池管理(Java EE规范甚至可能要求它)。 如果您的容器碰巧使用DBCP(就像Tomcat一样),那么很好,否则,请使用容器提供的任何东西。 回答2 大家都说过,您需要使用连接池。 为什么? 怎么了? 等等。 您的解决方案出了什么问题 我知道这一点,因为我曾经认为这是个好主意。 问题有两个: 所有线程(每个servlet请求都带有一个线程)将共享相同的连接。 因此,一次将处理一次请求。 即使您只是坐在单个浏览器中并依靠F5键,这也非常慢。 尝试一下:这听起来很高级和抽象
  • 如何使Google Chrome扩展程序弹出窗口保持打开状态?(How to keep Google Chrome Extension popup open?)
    问题 如果我打开扩展程序弹出窗口,则我将打开另一个窗口或选项卡,如果弹出窗口或选项卡返回该窗口,则该窗口或选项卡不会保持打开状态。 有没有一种方法可以强制它使弹出窗口保持打开状态? 回答1 作为用户,您当前不能强制弹出窗口保持打开状态。 这是UI团队做出的UI决定。 如果要强制执行设置,则可以通过更改弹出图标,在请求时打开新选项卡或注册新的弹出视图来通过其他方式显示此信息。 作为开发人员,检查弹出窗口,它将保持打开状态。 回答2 在此处的常见问题解答中:http://developer.chrome.com/extensions/faq.html#faq-persist-popups 当用户将精力集中在弹出窗口之外的浏览器的某些部分时,弹出窗口会自动关闭。 用户单击鼠标后,无法使弹出窗口保持打开状态。 回答3 除非您处于开发人员模式,否则无法停止关闭Chrome弹出窗口。 不过,您可以考虑使用这种替代方法: 而是启动一个普通的弹出窗口: 在您的popup.html文件中,加载运行以下代码的Javascript文件: var popupWindow = window.open( chrome.extension.getURL("normal_popup.html"), "exampleName", "width=400,height=400" ); window.close(); /
  • window.close和self.close不会在Chrome中关闭窗口(window.close and self.close do not close the window in Chrome)
    问题 问题是,当我调用window.close()或self.close()它不会关闭窗口。 现在似乎有人相信,在Chrome中,您无法通过脚本关闭任何非脚本创建的窗口。 这显然是错误的,但是即使它需要弹出一个警报进行确认,也不管它应该仍然这样做。 这些都没有发生。 因此,有没有人拥有使用javascript:window.close()或javascript:self.close()来真正关闭窗口的真实,实用且可靠的方法,该工具实际上可以完成预期的工作,并且在每个非浏览器中都可以正常工作基于Chrome? 任何建议将不胜感激,我正在寻找Javascript特定的解决方案,而不是JQuery或第三方实现。 更新:尽管很多建议都存在严重的局限性和可用性问题,但使用脚本标题中的// @grant window.close的最新建议(特定于TamperMonkey)通常可以解决问题,即使在通常无法使用的选项卡上也是如此处理close方法。 尽管这并非完全理想,并且不能针对每种情况进行泛化,但对我而言,这是一个很好的解决方案。 回答1 普通的javascript无法随意关闭Windows。 这是一项安全功能,该功能已在不久前推出,用于阻止各种恶意攻击和烦扰。 根据window.close()的最新工作规范: 如果满足以下所有条件,则Window对象上的close()方法应关闭浏览上下文A
  • 熟悉继承的代码库的最佳方式(The best way to familiarize yourself with an inherited codebase)
    问题 Stacker 没有人问过新程序员在进入该领域时发现的最令人震惊的事情。 在列表中非常重要的是继承一个必须迅速熟悉的代码库的影响。 突然发现自己负责维护 N 行代码,这些代码已经被弄乱了多久,并且有很短的时间开始为它做出贡献,这可能会令人震惊。 您如何有效地吸收所有这些新数据? 是什么缓解了这种转变? 是否唯一真正的解决方案已经为足够多的开源项目做出了贡献? 这也适用于资深程序员。 您使用什么技术来简化向新代码库的过渡? 我为此添加了 Community-Building 标签,因为我还想听听有关这些过渡的一些战争故事。 随意分享您如何处理压力特别大的学习曲线。 回答1 铅笔和笔记本(不要分心尝试创建一个不需要的解决方案) 边走边做笔记,每周一花一个小时通读并整理前几周的笔记对于大型代码库,第一印象可能具有欺骗性,并且当您熟悉自己时,问题往往会迅速重新排列。 请记住,您上一个工作环境中的问题在您的新环境中不一定有效或密切相关。 提防先入为主的观念。 您所做的笔记/观察将帮助您快速了解要问什么问题以及向谁提问。 希望您已经收集了所有官方(和非官方)利益相关者的姓名。 回答2 熟悉继承代码的最好方法之一就是亲自动手。 从修复一些简单的错误开始,然后逐步解决更复杂的错误。 与尝试系统地审查代码相比,这会让您更好地接受代码。 如果有需求或功能规范文档(希望是最新的),您必须阅读它。
  • 组织MATLAB类的最佳方法? [关闭](Best way to organize MATLAB classes? [closed])
    问题 关门了。 这个问题是基于意见的。 它当前不接受答案。 想要改善这个问题吗? 更新问题,以便可以通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 改善这个问题 MATLAB有两种组织类的方式: @-目录: @ClassName\ ClassName.m Method1.m Method2.m 单个文件: ClassName.m: classdef ClassName methods % all methods included here end end 第一种样式在新的classdef语法之前存在,但似乎是一种更结构化的处理方式。 第二种样式(所有内容都在一个文件中)是新样式。 您使用哪种方法,为什么? 回答1 新的单文件样式具有一些优点。 它允许并鼓励您编写许多小的方法,我认为这些方法会导致代码分解的更好。 创建新文件,保存文件并将其添加到源代码管理(我们都在使用源代码管理,对吗?)的麻烦很小,但是添加了数十种小方法就足以使我通常不愿考虑使用分类为更细粒度的功能。 编辑整个类很方便进行浏览,搜索和替换,而不必打开多个单独的编辑器选项卡,然后可以使用这些选项卡来组织不同类的源代码。 对于较大的代码库,单文件样式可能会有性能上的优势。 遍历源代码树的源代码控制和部署系统为stat和diff操作之类的文件收取每个文件的费用。 例如,对于较大的代码库,数千种方法可能非常重要
  • 在新窗口中的reStructuredText中打开链接(Open a link in a new window in reStructuredText)
    问题 我想使用reStucturedText在新窗口中打开链接。 这可能吗? 这将在同一窗口中打开链接: You can `check your location here. <http://geoiptool.com>`_ 回答1 要在新窗口或标签中打开页面,可以将属性target="_blank"到您的超链接中,尽管我不确定如何在reStructuredText中将属性添加到嵌入式超链接中。 但是,从Docutils FAQ中可以嵌套内联标记,例如,您可以使用raw指令将原始HTML包含到文档中。 You can |location_link|. .. |location_link| raw:: html <a href="http://geoiptool.com" target="_blank">check your location here</a> 更新地址评论 我有一个问题“为什么reStructuredText没有[插入一些很棒的功能]”。 在这种情况下,“为什么reStructuredText没有指定链接打开方式的方法” —我认为reStructuredText没有做到这一点的简便方法,因为单击链接的工作方式并不是真正的责任。 reStructuredText转换标记—标记的最终显示方式不取决于reStructuredText,而是用户选择使用的浏览器或查看器。
  • 如何使用MVVM Light Toolkit打开新窗口(How to open a new window using MVVM Light Toolkit)
    问题 我在WPF应用程序中使用MVVM Light工具包。 我想知道从现有窗口打开新窗口的最佳方法是什么。 我有这个MainViewModel ,它负责我的应用程序的MainWindow 。 现在在MainView ,单击按钮,我想在其顶部打开第二个窗口。 我已经将RelayCommmand绑定到Button的Command 。 在RelayCommand的方法中,我可以创建一个新的窗口对象,并简单地调用Show() ,如下所示: var view2 = new view2() view2.Show() 但我认为ViewModel不应该负责创建新的view2对象。 我已经看过这篇文章WPF MVVM从VIEW MODEL获取父对象,其中Bugnion建议将消息​​从viewmodel1传递到view1 ,然后view1应该创建新的view2 。 但是我不确定他将消息传递给view1究竟意味着什么? view1应该如何处理消息? 在代码背后还是什么? 问候,纳比尔 回答1 将消息从ViewModel1传递到View1意味着要使用MVVM Light Toolkit中的消息传递功能。 例如,您的ViewModel1可能有一个名为ShowView2Command的命令,然后它将发送一条消息以显示视图。 public class ViewModel1 : ViewModelBase {
  • 等待子窗口加载完成(Waiting for child window loading to complete)
    问题 是否有一个简单的钩子可以检测脚本打开的窗口是否已完成加载? 基本上,我想要等效于onLoad()钩子,但是我不能直接设置它-假定子文档是给定的,而我实际上不能在其中放入任何自己的代码。 例如,说我有以下两个文件: parent.html : <html> <head> <title>Parent</title> </head> <script type="text/javascript"> var w; function loadChild() { w = window.open(); w.location.href="child.html"; // block until child has finished loading... how? w.doSomething(); } </script> </html> <body> I am a parent window. <a href="javascript:loadChild()">Click me</a>. </body> child.html : <html> <head> <title>Child</title> </head> <script type="text/javascript"> function doSomething() { alert("Hi there"); } </script> </html