Otwórz adres URL w tym samym oknie i na tej samej karcie

361

Chcę otworzyć link w tym samym oknie i na tej samej karcie, która zawiera stronę z linkiem.

Kiedy próbuję otworzyć link za pomocą window.open, to otwiera się w nowej karcie - nie w tej samej karcie w tym samym oknie.

użytkownik1065055
źródło

Odpowiedzi:

599

Musisz użyć atrybutu name:

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

Edycja : adres URL powinien być poprzedzony protokołem. Bez tego próbuje otworzyć względny adres URL. Testowane w Chrome 59, Firefox 54 i IE 11.

vdbuilder
źródło
2
Drugi argument to tylko nazwa nowego okna, podobnie jak atrybut target=tagu a. W rzeczywistości możesz nazwać okno tak, jak chcesz. Wszystko, czego potrzebujesz, to ustawić inną wartość, aby nie otwierała się w tym samym oknie lub karcie.
ijse,
11
@ijse W rzeczywistości istnieje kilka specjalnych nazw, z których jedna to „_self”, która odnosi się do wygranej / karty, w której działa kod.;)
vdbuilder
5
„_self” nie jest określone w dokumentach MDN [ developer.mozilla.org/en-US/docs/Web/API/Window/open] w window.open (). Bardziej rozwiązaniem dla różnych przeglądarek jest użycie location.replace ().
Bryan Rayner,
1
Link MDN w powyższym komentarzu łączy się automatycznie z 404. Link to developer.mozilla.org/en-US/docs/Web/API/Window/open
groovecoder
_selfjest mowa w punkcie 5.1.6 nazwy kontekstowych przeglądanie tego zalecenia W3C HTML5 28 października 2014 pod adresem: w3.org/TR/html/browsers.html#browsing-context-names (ale window.locationnadal jest czystsze).
Dem Pilafian,
62

Aby upewnić się, że link jest otwarty na tej samej karcie, powinieneś użyć window.location.replace()

Zobacz przykład poniżej:

window.location.replace("http://www.w3schools.com");

Źródło: http://www.w3schools.com/jsref/met_loc_replace.asp

Andromeda
źródło
3
Nie zachowuje historii przeglądania, nie powinniśmy jej używać. zamiast tego spróbuj window.open („ google.com”, „_ top” ) link referencyjny geeksforgeeks.org/…
shyam_
2
to jest dla mnie dobre, dzięki stary
Angelus Roman
28

Możesz ustawić tę stronę na tę samą stronę bez podawania adresu URL:

window.open('?','_self');
Tom Berthold
źródło
To nie jest ta sama strona. Usunie dowolny ciąg zapytania z istniejącego adresu URL.
Quentin,
20

Jeśli masz swoje strony w „ramce”, to „Window.open („ logout.aspx ”,„ _ self ”)”

zostanie przekierowany w tej samej ramce. Więc używając

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

możemy załadować stronę jako nowe żądanie.

Mag
źródło
11

Jedną z najważniejszych funkcji javascript jest strzelanie do pilotów w locie. Uważam, że następujący mechanizm jest bardziej niezawodny niż używanie location.href=''lub location.reload()lub 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);
}

Powyższy kod jest również pomocny do otwierania nowej karty / okna i omijania wszystkich programów blokujących wyskakujące okienka !!! Na przykład

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
źródło
10

Otwórz kolejny adres URL, np. Link do kliknięcia

window.location.href = "http://example.com";
DarckBlezzer
źródło
8

Czy musisz użyć window.open? Co z używaniem window.location="http://example.com"?

Jeffrey Zhao
źródło
5

window.open(url, wndname, params), ma trzy argumenty. jeśli nie chcesz, aby było otwarte w tym samym oknie, po prostu ustaw inną nazwę wnd. Jak na przykład :

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

Oto szczegółowe informacje na temat tego window.open(), możesz mu zaufać!
https://developer.mozilla.org/en/DOM/window.open

spróbuj ~~

ijse
źródło
7
Pytanie jest bardzo jasne, czy chcesz otworzyć w tym samym oknie i tej samej karcie !
Środa
2

W HTML 5 możesz używać interfejsu API historii .

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

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

Następnie na następnej stronie można uzyskać dostęp do obiektu stanu w ten sposób

let url = history.state.prevUrl;
if (url) {
  console.log('user come from: '+ url)
}
Adi Prasetyo
źródło
1

To całkiem proste. Otwórz pierwsze okno jakowindow.open(url, <tabNmae>)

Przykład: window.open("abc.com",'myTab')

i dla następnego całego window.open, użyj tej samej nazwy karty zamiast _self, _parentitp.

Samit
źródło
1

Dokładnie tak window.open("www.youraddress.com","_self")

thanglv
źródło
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
źródło
W ogóle nie ma sensu uruchamiać ponownego ładowania bieżącej strony, a następnie anulować w następnej instrukcji, ładując nową stronę.
Quentin,
-3

Jak napisano w referencjach MDN, wystarczy podać nazwę nowego window/ tab.

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

otwórz na bieżącej stronie karty za pomocą _self

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

otwórz stronę nowej karty za pomocą _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
źródło
Nie możesz niezawodnie znać nazwy bieżącego okna. Lepiej postępuj zgodnie z radą zawartą w odpowiedzi z 2011 roku i użyj specjalnej nazwy.
Quentin,
Twój pierwszy przykład jest po prostu zły. _blank jest jawnie nowym nienazwanym oknem lub kartą.
Quentin,
Ani trochę! jeśli ustawię _self, otworzy się na bieżącej stronie, co jest dla mnie złe, potrzebuję tylko jednej nowej strony.
xgqfrms
Pytanie nie dotyczy tego, czego potrzebujesz! Jeśli chcesz odpowiedzieć na pytanie, czego potrzebujesz, znajdź pytanie, które o to pyta.
Quentin