12

是否可以通过javascriptWindows Phone 7浏览器中打开新窗口或标签?

window.open似乎不支持也不支持target='_blank'

我在这里错过了什么吗?这个基本功能在 iphone 和 android 上运行得很好。关于如何在 Windows Phone 7 中使用它的任何想法?

4

3 回答 3

28

在 Windows Phone 7 上,这无法以编程方式实现。这一切都在用户手中。

引用微软员工的话:

“用户可以通过点击并按住链接以获取上下文菜单来在新选项卡中打开链接,但会忽略定位新窗口的锚点或脚本请求。

有几个原因:

  • 不支持跨窗口通信。
  • Windows Phone 只有一个浏览器实例,因此新的“窗口”必须以选项卡的形式打开。
  • 浏览器体验是全屏的,因此用户没有良好的视觉提示,除非他们明确请求,否则他们已移动到新选项卡。
  • 在新选项卡中导航“返回”会退出浏览器,如果用户不知道创建了新选项卡,这会使他们感到困惑。”
于 2012-09-04T14:37:50.050 回答
3

如果您尝试为 in-ap 浏览器控制添加此功能,我可以建议您一种方法。

您必须在浏览器控件能够成功加载页面的每个网页上注入一个 java 脚本。在 java 脚本中,使用 window.extern.notify 调用ScriptNotify后面代码中的函数。在检测到适当的消息时,创建一个新的浏览器控件实例并将其添加到数组或列表中。因此,您可以模拟应用内浏览器控制的新选项卡功能。

要注入的JS代码可能是这样的String NEW_TAB_FUNCTION = "window.open = function(__msg){window.external.notify('addnewtab');};";

可以使用哪个注入browser.InvokeScript("eval", NEW_TAB_FUNCTION);

在 ScriptNotify 检查addnewtab(keep IsScriptEnabled = True)

    void WebBrowser_ScriptNotify(object sender, NotifyEventArgs e)
    {
        if (e.Value == "addnewtab")
        {   
            //do work here
        }
    }

请注意,我已经用每次在新网页上注入的函数覆盖了 JS 中的 window.open 函数,以便收到用户输入的通知。

另请注意,这仅适用于 WebBrowser Control 而不是外部浏览器。

于 2012-09-05T04:15:00.683 回答
0

我的解决方法很简单:

window.open

如果失败则返回 null,所以在这种情况下,我在同一个窗口中打开它:

var win = window.open(href, '_blank');
    if(!win || win==null){
        window.location.href = href;
    }else{
        win.focus();     
    }

无论如何,这是一个后备的好习惯......

于 2015-01-21T19:57:09.340 回答