Tôi có một số javascript dựa vào việc sử dụng window.open và liên lạc giữa các cửa sổ (nơi cửa sổ 'con' mới communicates success/failure to the 'parent' window).Phát hiện hỗ trợ trình duyệt để liên lạc giữa các cửa sổ
Điều này (giao tiếp giữa các cửa sổ) hoạt động tốt trong hầu hết các trường hợp, nhưng không hoạt động đối với một số trình duyệt không hỗ trợ liên lạc giữa các cửa sổ. Ví dụ: Windows Phone và iPhone's UIWebView.
Tôi hiện đang thực hiện phía máy khách (javascript) user-agent sniffing để phát hiện các tình huống này - và dự phòng cho một đường dẫn mã khác để khắc phục sự cố.
Có cách nào khác để đánh lừa tác nhân người dùng mà tôi có thể sử dụng không?
Để rõ ràng, window.open hoạt động (ở nơi hoạt động có nghĩa là 'nó mở url được yêu cầu'). Những gì không phải là đáng tin cậy là sử dụng window.opener và postMessage để thực hiện liên lạc giữa các cửa sổ từ 'con' thành 'cha mẹ'.
Đứa trẻ cũng có thể truy cập thuộc tính window.opener - sẽ không có giá trị - nhưng tiếc là đây không phải là kỹ thuật phát hiện đáng tin cậy. Ví dụ, nếu bạn mở cửa sổ con trực tiếp (không sử dụng window.open từ cha mẹ) thì window.opener sẽ là null mặc dù đứa trẻ thực sự thực sự hỗ trợ giao tiếp giữa các cửa sổ. – mjwills
tôi biết 'window.open' sẽ hoạt động, nhưng hàm sẽ trả về ID cửa sổ con không? – Raptor
Tôi không chắc chắn về việc thông tin đó sẽ giúp ích như thế nào. Những gì tôi muốn là tính năng phát hiện bên trong cửa sổ con để cho dù nó có thể nói chuyện với cha mẹ của nó. Giá trị trả về của cuộc gọi hàm window.open rõ ràng chỉ có sẵn cho phụ huynh - vì vậy 'nó thay vì liên quan đến phía bên kia của đường hầm kín này'. Tất cả những gì đang được nói, kiểm tra giá trị trả về mang lại giá trị rỗng trong IE9 trên thiết bị di động và một đối tượng cửa sổ trong UIWebView. Và lưu ý rằng trong cả hai trường hợp, cửa sổ mới được tải chính xác (nhưng sẽ không thể kết nối với cha mẹ của nó). – mjwills