ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript-使用Silverlight 3的HtmlPage.Window.Navigate方法重用已经打开的浏览器窗口

2019-12-10 05:44:10  阅读:397  来源: 互联网

标签:navigation silverlight-3-0 browser javascript silverlight


我想使用外部浏览器窗口在Silverlight应用程序中实现预览功能.这里有一个项目列表,每当用户单击其中一个项目时,它就会在单独的浏览器窗口中打开(内容是pdf文档,这就是为什么它会被SL应用程序处理的原因).

现在,要实现此目的,我只需使用

HtmlPage.Window.Navigate(new Uri("http://www.bing.com"), "_blank");

效果很好.

现在,我的客户不喜欢每次点击都会打开一个新的浏览器窗口的事实.他希望每次单击项目时都可以重用浏览器窗口.所以我出去尝试实现这一点:

选项1-使用Navigate方法的重载,如下所示:

HtmlPage.Window.Navigate(new Uri("http://www.bing.com"), "foo");

我假设在后续调用中使用相同的目标参数值(foo)时,将重用该窗口.
这是行不通的.每次都会有一个新窗口.

选项2-在HtmlPage上使用PopupWindow方法

HtmlPage.PopupWindow(new Uri("http://www.bing.com"), "blah", new HtmlPopupWindowOptions());

这是行不通的.每次都会有一个新窗口.

选项3-获取打开的窗口的句柄并在后续调用中重用

private HtmlWindow window;
private void navigationButton_Click(object sender, RoutedEventArgs e)
{
    if (window == null)
        window = HtmlPage.Window.Navigate(new Uri("http://www.bing.com"), "blah");
    else
        window.Navigate(new Uri("http://www.bing.com"), "blah");

    if (window == null)
        MessageBox.Show("it's null");
}

这是行不通的.我为PopupWindow()方法尝试了相同的操作,并且每次窗口都为空,因此每次单击都会打开一个新窗口.我已经检查了EnableHtmlAccess和IsPopupWindowAllowed属性,它们都返回true,即as they should.

选项4-使用Eval方法执行一些自定义JavaScript

private const string javascript = @"var popup = window.open('', 'blah') ; 
                                    if(popup.location != 'http://www.bing.com' ){
                                        popup.location = 'http://www.bing.com';
                                    }
                                    popup.focus();";

private void navigationButton_Click(object sender, RoutedEventArgs e)
{
    HtmlPage.Window.Eval(javascript);
}

这是行不通的.每次都会有一个新窗口.

选项5-使用CreateInstance在页面上运行一些自定义JavaScript

private void navigationButton_Click(object sender, RoutedEventArgs e)
{
    HtmlPage.Window.CreateInstance("thisIsPlainHell");
}

在我的aspx中

function thisIsPlainHell() {
    var popup = window.open('http://www.bing.com', 'blah');
}

这行不通.每次都会有一个新窗口.

难道我做错了什么?我绝对不是JavaScript专家,所以我希望我在这里找不到明显的东西.

干杯,
菲尔

解决方法:

这是浏览器的安全功能.重用命名窗口仅限于该窗口当前显示的文档域.

承载Silverlight控件的页面将从“ http://www.yoursite.com”运行,因此,如果该窗口当前还显示“ http://www.yoursite.com”的内容,则它只能重复使用名为“ foo”的窗口.由于您已将“ http://www.bing.com”加载到该窗口中,因此在上下文“ http://www.yoursite.com”中运行的代码不再可见.因此,当您使用“ Foo”打开窗口时,浏览器不会看到具有该名称的当前窗口,因此会创建另一个窗口.

标签:navigation,silverlight-3-0,browser,javascript,silverlight
来源: https://codeday.me/bug/20191210/2099785.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有