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.