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.

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.


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


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');

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.


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);
}

10

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

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

8

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


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 ~~


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

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.



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> 

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");
    },

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.