我有一些JavaScript依赖于使用window.open和窗口间通信(其中新的'子窗口'communicates success/failure to the 'parent' window)。检测浏览器对窗口间通信的支持
这种(窗口间通信)在大多数情况下工作正常,但对于某些不支持窗口间通信的浏览器不起作用。例子包括Windows Phone和iPhone's UIWebView。
我目前正在做客户端(基于javascript)user-agent sniffing来检测这些场景 - 并回退到不同的代码路径来解决该问题。
是否有替代用户代理嗅探,我可以使用?
要清楚,window.open的作品(工作意味着'它打开请求的网址')。什么不是可靠是使用window.opener和postMessage进行从'孩子'到'父母'的窗口间通信。
孩子也可以访问window.opener属性 - 应该是null - 但不幸的是这不是一个可靠的检测技术。例如,如果直接打开子窗口(不使用父窗口中的window.open),那么即使子窗口实际上确实支持窗口间通信,window.opener也将为空。 – mjwills 2013-02-25 06:43:01
我知道window.open会工作,但函数会返回子窗口ID吗? – Raptor 2013-02-25 06:49:56
我不确定如何获得该信息将有所帮助。我想要的是在子窗口内部的特征检测,以确定它是否可以与其父对话。 window.open函数调用的返回值显然仅适用于父类 - 所以'它涉及到这个密封舱口的另一侧'。 所有这一切说,检查返回值在移动IE9中产生空,并在UIWebView中的窗口对象。并注意,在这两种情况下,新窗口加载正确(但将无法与其父母通信)。 – mjwills 2013-02-25 08:51:14