Abrir URL na mesma janela e na mesma guia

361

Quero abrir um link na mesma janela e na mesma guia que contém a página com o link.

Quando tento abrir um link usando window.open, ele é aberto em uma nova guia - não na mesma guia na mesma janela.

user1065055
fonte

Respostas:

600

Você precisa usar o atributo name:

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

Editar : o URL deve ser anexado com o protocolo. Sem ele tenta abrir o URL relativo. Testado no Chrome 59, Firefox 54 e IE 11.

vdbuilder
fonte
2
O segundo argumento é apenas um nome para a nova janela, como o atributo target=da tag a. Na verdade, você pode nomear sua janela como desejar. Tudo o que você precisa é definir um valor diferente, para que não seja aberto na mesma janela ou guia.
ijse
12
@ijse Na verdade, existem alguns nomes especiais, um dos quais é '_self', que refere-se à vitória / guia o código está sendo executado em;).
vdbuilder
5
'_self' não está especificado nos documentos MDN [ developer.mozilla.org/en-US/docs/Web/API/Window/open] em window.open (). Uma solução mais entre navegadores é usar location.replace ().
11139 Bryan Rayner
11
O link MDN no comentário acima é auto-ligando para um 404. Link é developer.mozilla.org/en-US/docs/Web/API/Window/open
groovecoder
_selfé mencionado na seção 5.1.6 Navegando nos nomes de contexto da Recomendação do HTML5 W3C em 28 de outubro de 2014 em: w3.org/TR/html/browsers.html#browsing-context-names (mas window.locationainda é mais limpo).
Dem Pilafian
28

Você pode fazê-lo ir para a mesma página sem especificar o URL:

window.open('?','_self');
Tom Berthold
fonte
Essa não é a mesma página. Ele removerá qualquer string de consulta do URL existente.
Quentin
20

Se você tiver suas páginas dentro de "frame", "Window.open ('logout.aspx', '_ self')"

será redirecionado dentro do mesmo quadro. Então, usando

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

podemos carregar a página como nova solicitação.

Magesh
fonte
11

Um dos recursos mais importantes do javascript é acionar manipuladores onclick em tempo real. Eu achei o seguinte mecanismo mais confiável do que usar location.href=''or location.reload()ou 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);
}

O código acima também é útil para abrir uma nova guia / janela e ignorar todos os bloqueadores de pop-up !!! Por exemplo

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);
}
Muaz Khan
fonte
10

Abra outro URL como um clique no link

window.location.href = "http://example.com";
DarckBlezzer
fonte
8

Você tem que usar window.open? Que tal usar window.location="http://example.com"?

Jeffrey Zhao
fonte
5

window.open(url, wndname, params), possui três argumentos. se você não quiser abrir na mesma janela, basta definir um nome de wnd diferente. tal como :

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).

Aqui estão os detalhes sobre window.open(), você pode confiar!
https://developer.mozilla.org/en/DOM/window.open

tente ~~

ijse
fonte
7
A pergunta é muito clara sobre querer abrir na mesma janela e na mesma guia !
Senão
2

Com o html 5, você pode usar a API do histórico .

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

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

Na próxima página, você poderá acessar o objeto de estado dessa forma

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

Isso é bem fácil. Abra a primeira janela comowindow.open(url, <tabNmae>)

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

e para o próximo tudo window.open, usar mesmo nome da guia , em vez de _self, _parentetc.

Samit
fonte
1

Exatamente assim window.open("www.youraddress.com","_self")

thanglv
fonte
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> 
Siddharth Shukla
fonte
Não faz sentido disparar uma recarga da página atual e cancelá-la na próxima instrução carregando uma nova página.
Quentin
-3

Como diz o juiz da MDN, basta dar um nome ao novo window/ tab.

https://developer.mozilla.org/en-US/docs/Web/API/Window/open#Syntax

abrir na página da guia atual usando _self

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

abrir em uma nova página de guia usando _blank

vue demo

    <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");
    },
xgqfrms
fonte
Você não pode saber com segurança o nome da janela atual. Melhor seguir os conselhos desta resposta de 2011 e usar o nome _self especial.
Quentin
Seu primeiro exemplo está errado. _blank é, explicitamente, uma nova janela ou guia sem nome .
Quentin
de modo nenhum! se eu definir _self, ele será aberto na página atual, o que é ruim para mim, só preciso de uma nova página.
Xgqfrms
A questão não é sobre o que você precisa! Se você quiser responder a uma pergunta sobre o que precisa, encontre uma pergunta solicitando isso.
Quentin