在同一窗口和同一选项卡中打开URL


361

我想在包含该链接页面的同一窗口和同一选项卡中打开一个链接。

当我尝试使用打开链接时window.open,它将在新选项卡中打开,而不是在同一窗口的同一选项卡中打开。

Answers:


599

您需要使用name属性:

window.open("https://www.youraddress.com","_self")

编辑:URL应该在协议之前。没有它会尝试打开相对URL。在Chrome 59,Firefox 54和IE 11中进行了测试。


2
第二个参数只是新窗口的名称,如target=tag 的属性a。实际上,您可以随意命名窗口。您所需要的全部设置为不同的值,这样它就不会在同一窗口或选项卡中打开。
ijse 2011年

11
@ijs​​e实际上,有几个特殊名称,其中一个是'_self',它表示代码在其中运行的win / tab。;)
vdbuilder

5
在window.open()的MDN [ developer.mozilla.org/zh-CN/docs/Web/API/Window/open]文档中未指定“ _self” 。跨浏览器的另一种解决方案是使用location.replace()。
布莱恩·雷纳

1
上面评论中的MDN链接是自动链接到404。链接是developer.mozilla.org/en-US/docs/Web/API/Window/open
–groovecoder

_self2014年10月28日HTML5 W3C建议书的5.1.6浏览上下文名称中提到了该变量,网址为:w3.org/TR/html/browsers.html#browsing-context-names(但仍然更干净)。window.location
Dem Pilafian 2015年



28

您可以不指定URL而将其转到同一页面:

window.open('?','_self');

那不是同一页。它将从现有URL中删除所有查询字符串。
Quentin

20

如果您的页面位于“框架”内,则“ Window.open('logout.aspx','_ self')”

将在同一框架内重定向。所以用

"Window.open('logout.aspx','_top')"

我们可以将页面作为新请求加载。


11

最杰出的javascript功能之一是即时触发onclick处理程序。我发现以下机制比使用location.href=''or location.reload()或or 更可靠window.open

// this function can fire onclick handler for any DOM-Element
function fireClickEvent(element) {
    var evt = new window.MouseEvent('click', {
        view: window,
        bubbles: true,
        cancelable: true
    });

    element.dispatchEvent(evt);
}

// this function will setup a virtual anchor element
// and fire click handler to open new URL in the same room
// it works better than location.href=something or location.reload()
function openNewURLInTheSameWindow(targetURL) {
    var a = document.createElement('a');
    a.href = targetURL;
    fireClickEvent(a);
}

上面的代码也有助于打开新的标签页/窗口并绕过所有弹出窗口阻止程序!!!例如

function openNewTabOrNewWindow(targetURL) {
    var a = document.createElement('a');
    a.href = targetURL;

    a.target = '_blank'; // now it will open new tab/window and bypass any popup blocker!

    fireClickEvent(a);
}


8

你要用window.open吗?那使用window.location="http://example.com"呢?


5

window.open(url, wndname, params),它具有三个参数。如果您不想在同一窗口中打开它,只需设置一个不同的wndname即可。如 :

window.open(url1, "name1", params); // this open one window or tab
window.open(url1, "name2", params); // though url is same, but it'll open in another window(tab).

这是有关的详细信息window.open(),您可以放心!
https://developer.mozilla.org/en/DOM/window.open

试试看~~


7
问题很明显是关于要在同一窗口同一选项卡中打开!
SNag 2013年

2

使用html 5,您可以使用历史记录API

history.pushState({
  prevUrl: window.location.href

}, 'Next page', 'http://localhost/x/next_page');
history.go();

然后在下一页上,您可以像这样访问状态对象

let url = history.state.prevUrl;
if (url) {
  console.log('user come from: '+ url)
}

1

那很简单。打开第一个窗口为window.open(url, <tabNmae>)

例: window.open("abc.com",'myTab')

对于接下来的所有window.open,请使用相同的标签名称,而不是_self_parent等等。


1

完全像这样 window.open("www.youraddress.com","_self")


1
   Just Try in button.

   <button onclick="location.reload();location.href='url_name'" 
   id="myButton" class="btn request-callback" >Explore More</button>

   Using href 

  <a href="#" class="know_how" onclick="location.reload();location.href='url_name'">Know More</a> 

触发当前页面的重新加载然后在下一个语句中通过加载新页面来取消它完全没有意义。
Quentin

-3

正如MDN的引用所说,只需提供新的window/ 的名称tab

https://developer.mozilla.org/zh-CN/docs/Web/API/Window/open#Syntax

在当前标签页中使用 _self

<a
 href="url"
 target="_self">
   open
</a>
const autoOpenAlink = (url = ``) => {
  window.open(url, "open testing page in the same tab page");
}

使用打开新标签页 _blank

Vue演示

    <div style="margin: 5px;">
        <a
            :href="url"
            @click="autoOpenAlink"
            target="_blank"
            >
            {{url}}
        </a>
    </div>

Vue

    autoOpenAlink(e) {
        e.preventDefault();
        let url = this.url;
        window.open(url, "iframe testing page");
    },

您无法可靠地知道当前窗口的名称。最好遵循此2011年答案中的建议,并使用特殊的_self名称。
Quentin

您的第一个示例是错误的。_blank显然是未命名的窗口或标签。
Quentin

一点也不!如果设置_self,它将在当前页面中打开,这对我不利,我只需要一个新页面。
xgqfrms

问题不关乎需要什么!如果您想回答有关所需内容的问题,请寻找一个要问的问题。
昆汀
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.