Rất tiếc, một số trình duyệt hiện đại vẫn không hỗ trợ các tab lấy nét, xem ví dụ this Firefox bug entry.
Tuy nhiên, mã sau đây hoạt động tốt cho tôi. Để giải quyết sự cố này, cửa sổ mở lại cửa sổ/tab nếu nó không thể tập trung:
var win = window.open("two.html", "two")
win.focus();
setTimeout(function() {
if(document.hasFocus()) {
win.close();
window.open("two.html", "two")
}
}, 1);
Dòng đầu tiên mở cửa sổ và cố lấy nét bằng cách sử dụng dòng thứ hai. Nếu cửa sổ có tên two
đã có, không có cửa sổ/tab mới được mở, nhưng nó được sử dụng lại.
Bí quyết hiện tại là chúng tôi kiểm tra xem cửa sổ hiện tại vẫn có tiêu điểm bằng cách sử dụng document.hasFocus()
. Nếu vậy, chúng tôi đóng cửa sổ lại và mở lại. Điều này chỉ dành cho các trình duyệt không hỗ trợ tập trung vào tab sẽ được sử dụng lại trực tiếp. Hiện tại, đây là trường hợp của FF và IE/MS Edge. Chrome hoạt động tốt.
Tuy nhiên, trực tiếp sau khi sử dụng window.open
, document.hasFocus()
luôn trả về đúng (như đã nói, cũng trong Chrome). Giải pháp thay thế là sử dụng setTimeout
một ms sau đó.
Không chắc chắn điều này có thể được thực hiện. Làm thế nào về việc mở một cửa sổ mới? –
tôi chỉ muốn mở một cửa sổ mới chỉ một lần, không phải mỗi lần – hunt
chấp nhận ans nếu nó hoạt động cho bạn –