2013-09-26 164 views
10

window.open() được gọi từ chuỗi chính mở tab mới theo mặc định.javascript window.open từ gọi lại

Nhưng, ở đây mở cửa sổ mới mỗi lần (Opera 16 và Google Chrome 29)

<input type="button" value="Open" onclick="cb1()"> 

<script type="text/javascript"> 
function cb1() { 
    setTimeout(wo, 1000); //simple async 
} 

function wo() 
{ 
    var a = window.open("http://google.com", "w2"); 
    a.focus(); 
} 
</script> 

(lol, đây là câu trả lời của tôi cho Open a URL in a new tab (and not a new window) using JavaScript).

Làm cách nào tôi có thể mở trong tab (theo mặc định của trình duyệt) tại đây?

+0

Hành vi này xảy ra trong trình duyệt nào? – shanet

+0

Hy vọng đây là _ của bạn [answer] (http://stackoverflow.com/questions/2601761/change-browser-settings-by-script) _. –

+0

tất cả các trình duyệt. trang thử nghiệm user2819018

Trả lời

0

Nếu cửa sổ mới được mở dưới dạng tab mới hoặc phiên bản mới, tùy thuộc vào cài đặt người dùng.

+0

OP nói rằng trong một số trường hợp, nó được mở trong một tab mới và trong một số trường hợp khác trong một cửa sổ mới, do đó vấn đề anh gặp phải rõ ràng là không liên quan đến cài đặt người dùng. – Yogh

10

Chúng tôi đã gặp vấn đề tương tự này và tìm kiếm xung quanh SO để có câu trả lời. Những gì chúng tôi tìm thấy hoạt động trong hoàn cảnh của chúng tôi và sự khôn ngoan chưng cất như sau:

Sự cố liên quan đến trình chặn cửa sổ bật lên ngăn chặn cửa sổ chương trình mở ra. Trình duyệt cho phép cửa sổ mở ra từ các nhấp chuột thực tế của người dùng xảy ra trên chuỗi chính. Tương tự, nếu bạn gọi window.open trên chủ đề chính nó sẽ hoạt động, như đã nói ở trên. Theo câu trả lời này trên Open a URL in a new tab (and not a new window) using JavaScript nếu bạn đang sử dụng cuộc gọi Ajax và muốn mở cửa sổ thành công, bạn cần đặt async: false hoạt động vì điều đó sẽ giữ mọi thứ trên chuỗi chính.

Chúng tôi không thể kiểm soát cuộc gọi Ajax của chúng tôi như thế, nhưng tìm thấy một giải pháp khác hoạt động vì những lý do tương tự. Cảnh báo, nó là một chút hacky và có thể không thích hợp cho bạn đưa ra những hạn chế của bạn. Được phép nhận xét về một câu trả lời khác trên Open a URL in a new tab (and not a new window) using JavaScript bạn mở cửa sổ trước khi gọi setTimeout và sau đó cập nhật nó trong chức năng bị trì hoãn. Có một vài cách để làm điều này. Giữ tham chiếu đến cửa sổ khi bạn mở cửa sổ, w = window.open... và đặt w.location hoặc mở với mục tiêu, window.open('', 'target_name'), trong chức năng bị trễ mở trong mục tiêu đó, window.open('your-url', 'target_name') và dựa vào trình duyệt để giữ tham chiếu.

Tất nhiên, nếu người dùng có cài đặt của họ để mở liên kết trong cửa sổ mới, điều này sẽ không thay đổi điều đó, nhưng đó không phải là vấn đề đối với OP.

+1

Đối với những người cần mã chi tiết hơn, hãy xem bài đăng trên blog này: http://theandystratton.com/2012/how-to-bypass-google-chromes-javascript-popup-blocker –