window.open
Không thể mở Popups đáng tin cậy trong một tab mới trong tất cả các trình duyệt
Các trình duyệt khác nhau thực hiện hành vi window.open
theo những cách khác nhau, đặc biệt là liên quan đến tùy chọn trình duyệt của người dùng. Bạn không thể mong đợi hành vi tương tự window.open
là đúng trên tất cả Internet Explorer, Firefox và Chrome, vì các cách khác nhau mà chúng xử lý tùy chọn trình duyệt của người dùng.
Ví dụ: người dùng Internet Explorer (11) có thể chọn mở cửa sổ bật lên trong cửa sổ mới hoặc tab mới, bạn không thể buộc người dùng Internet Explorer 11 mở cửa sổ bật lên theo cách nhất định window.open
, như được nhắc đến trong câu trả lời của Quentin .
Đối với người dùng Firefox (29), việc sử dụng window.open(url, '_blank')
phụ thuộc vào tùy chọn tab trình duyệt của họ, mặc dù bạn vẫn có thể buộc họ mở cửa sổ bật lên trong một cửa sổ mới bằng cách chỉ định chiều rộng và chiều cao (xem phần "Điều gì về Chrome?" Bên dưới).
Trình diễn
Chuyển đến cài đặt trình duyệt của bạn và định cấu hình nó để mở cửa sổ bật lên trong một cửa sổ mới.
Internet Explorer (11)


Trang thử nghiệm
Sau khi thiết lập Internet Explorer (11) để mở cửa sổ bật lên trong một cửa sổ mới như đã trình bày ở trên, hãy sử dụng trang thử nghiệm sau để kiểm tra window.open
:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<button onclick="window.open('https://stackoverflow.com/q/4907843/456814');">
<code>window.open(url)</code>
</button>
<button onclick="window.open('https://stackoverflow.com/q/4907843/456814', '_blank');">
<code>window.open(url, '_blank')</code>
</button>
</body>
</html>
Quan sát rằng các cửa sổ bật lên được mở trong một cửa sổ mới, không phải là một tab mới.
Bạn cũng có thể kiểm tra các đoạn mã trên ở trên Firefox (29) với tùy chọn tab được đặt thành các cửa sổ mới và xem kết quả tương tự.
Chrome thì sao? Nó thực hiệnwindow.open
khác với Internet Explorer (11) và Firefox (29).
Tôi không chắc chắn 100%, nhưng có vẻ như Chrome (phiên bản 34.0.1847.131 m
) dường như không có bất kỳ cài đặt nào mà người dùng có thể sử dụng để chọn có hay không mở cửa sổ bật lên trong một cửa sổ mới hoặc tab mới (như Firefox và Internet Explorer có). Tôi đã kiểm tra tài liệu Chrome để quản lý cửa sổ bật lên , nhưng nó không đề cập bất cứ điều gì về loại điều đó.
Ngoài ra, một lần nữa, các trình duyệt khác nhau dường như thực hiện hành vi window.open
khác nhau. Trong Chrome và Firefox, việc chỉ định chiều rộng và chiều cao sẽ buộc cửa sổ bật lên, ngay cả khi người dùng đã đặt Firefox (29) để mở các cửa sổ mới trong một tab mới (như đã đề cập trong câu trả lời cho JavaScript mở trong một cửa sổ mới, không phải tab ) :
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<button onclick="window.open('https://stackoverflow.com/q/4907843/456814', 'test', 'width=400, height=400');">
<code>window.open(url)</code>
</button>
</body>
</html>
Tuy nhiên, đoạn mã tương tự ở trên sẽ luôn mở một tab mới trong Internet Explorer 11 nếu người dùng đặt các tab làm tùy chọn trình duyệt của họ, thậm chí không chỉ định chiều rộng và chiều cao sẽ buộc cửa sổ bật lên mới cho họ.
Vì vậy, hành vi của window.open
Chrome dường như là mở cửa sổ bật lên trong tab mới khi được sử dụng trong một onclick
sự kiện, để mở chúng trong các cửa sổ mới khi được sử dụng từ bảng điều khiển trình duyệt ( như được người khác lưu ý ) và mở chúng trong các cửa sổ mới khi quy định với chiều rộng và chiều cao.
Tóm lược
Các trình duyệt khác nhau thực hiện hành vi window.open
khác nhau liên quan đến sở thích trình duyệt của người dùng. Bạn không thể mong đợi hành vi tương tự window.open
là đúng trên tất cả Internet Explorer, Firefox và Chrome, vì các cách khác nhau mà chúng xử lý tùy chọn trình duyệt của người dùng.
Đọc thêm