2013-05-25 39 views
8

Tôi có một chút javascript nhằm mở hai hoặc nhiều tab. Điều này làm việc tốt trong FF và IE, nhưng chrome mở thứ hai trong một cửa sổ mới thay vì tab. Nó không phụ thuộc vào url như tôi đã thử nó với hai url giống hệt nhau. Đầu tiên mở trong tab, tab thứ hai trong cửa sổ mới.hành vi window.open trong tab/cửa sổ chrome

Dưới đây là đoạn mã của tôi:

for(var i=0 ; i<sites.length ;i++) 
{ 
    window.open(sites[i].Url); 
} 
+0

Bạn có thể rõ ràng hơn không? Tôi không hiểu câu hỏi của bạn –

+0

@LightStyle Mã của anh ấy mở các cửa sổ mới thay vì các tab mới trong Chrome. – Juampi

+0

Để dễ hiểu hơn đây là trang kiểm tra: http://www.bosmaadvies.com/chrometest.html – user1151653

Trả lời

11

Chrome sẽ tự động mở một URL trong một tab mới chỉ nếu nó là người dùng tạo ra hành động, giới hạn trong một tab cho mỗi hành động người dùng. Trong mọi trường hợp khác, URL sẽ được mở trong cửa sổ mới (trong đó, BTW, bị chặn theo mặc định trên Chrome).
window.open phải được gọi trong một cuộc gọi lại được kích hoạt bởi hành động của người dùng (ví dụ: onclick) để mở trang trong tab mới thay vì cửa sổ.

Trong ví dụ của bạn, bạn cố gắng mở tab N khi hành động của người dùng. Nhưng chỉ cái đầu tiên được mở trong một tab mới (vì đó là một hành động do người dùng tạo). Sau đó, bất kỳ URL nào khác sẽ được mở trong một cửa sổ mới.

tương tự câu hỏi: force window.open() to create new tab in chrome (xem câu trả lời bằng maclema)

+1

Cảm ơn, tôi sợ nó sẽ giống như thế này . Tôi đã báo cáo nó cho google như một lỗi như tôi cảm thấy rằng một chức năng nên hành xử nhất quán, và không thay đổi hành vi lần thứ hai nó được gọi là. Bên cạnh đó, các trình duyệt khác chỉ cần mở các tab. – user1151653

+1

Tôi tin rằng đó là do thiết kế, vì các cửa sổ mới có cơ chế chặn và các tab mới thì không. Câu chuyện giống với cảnh báo. Nếu bạn có một vài cảnh báo liên tiếp (trong cùng phạm vi/ngữ cảnh) - thông báo đầu tiên sẽ được hiển thị bình thường và tất cả các cảnh báo sau sẽ có hộp kiểm "ngăn chặn thêm hộp thoại". –

+1

Tôi hiểu những cân nhắc, nhưng thẳng thắn tôi nghĩ rằng đó là một thiết kế ngớ ngẩn nếu nó dẫn đến hành vi bất ngờ. Tôi muốn biết những gì một cuộc gọi đến một chức năng nào, và nếu một cuộc gọi đến window.open dẫn đến kết quả hoàn toàn khác nhau từ một cuộc gọi, sau đó thiết kế là do lỗi. Bên cạnh đó cả FF và IE đều có các trình chặn cửa sổ bật lên và thực hiện điều này một cách chính xác. – user1151653

0

Tôi đã xem qua câu hỏi này What is the (function() { })() construct in JavaScript? mang đến cho lời giải thích trên IIFE. Tôi nghĩ rằng điều này có thể được sử dụng hơn. Xin vui lòng chịu với tôi Tôi không có kiến ​​thức sâu về javascript. Nhưng tôi đã cố gắng như dưới đây và làm việc của nó.

var sites = [{"url" : "http://www.google.com"} , {"url" : "http://www.yahoo.com"} , {"url" : "http://www.msn.com"}]; 
console.log(sites); 
for(var i=0 ; i < sites.length ;i++) { 
    (function(i) { 
     console.log(i); 
     window.open(sites[i].url , "_blank"); 
    })(i); 
} 

Mở url trong tab mới bằng chrome.

Các vấn đề liên quan