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

本文围绕在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

使用uni-app内置的uni.navigateTo方法跳转到系统浏览器打开知乎网页,可以按照以下步骤进行操作: 1. 在需要跳转的页面中,使用uni.navigateTo方法跳转到一个中间页面(例如名为"externalLink"的页面)。 ```javascript uni.navigateTo({ url: &#39;/pages/externalLink&#39; }); ``` 2. 在"externalLink"页面的onLoad生命周期函数中,使用uni.getSystemInfo方法获取当前系统信息,并根据系统信息判断要打开的链接。 ```javascript onLoad() { uni.getSystemInfo({ success: (res) => { const platform = res.platform.toLowerCase(); let url = &#39;&#39;; if (platform === &#39;android&#39;) { url = &#39;intent://www.zhihu.com/#Intent;scheme=https;package=com.android.chrome;end&#39;; } else if (platform === &#39;ios&#39;) { url = &#39;https://www.zhihu.com/&#39;; } else { // 其他平台处理 } this.openExternalLink(url); } }); }, methods: { openExternalLink(url) { uni.redirectTo({ url: `/pages/webview?url=${encodeURIComponent(url)}` }); } } ``` 3. 在"externalLink"页面的methods中,定义openExternalLink方法,并通过uni.redirectTo方法跳转到一个webview页面,并将要打开的链接作为参数传递给webview页面。 ```javascript openExternalLink(url) { uni.redirectTo({ url: `/pages/webview?url=${encodeURIComponent(url)}` }); } ``` 4. 创建一个webview页面(例如名为"webview"的页面),用于展示外部链接。 ```html <template> <view class="container"> <web-view :src="url"></web-view> </view> </template> <script> export default { data() { return { url: &#39;&#39; }; }, onLoad(options) { this.url = decodeURIComponent(options.url); } }; </script> ``` 在这个示例中,通过判断当前系统平台(Android或iOS),选择不同的网页链接进行跳转。Android平台使用intent协议打开Chrome浏览器,iOS平台直接使用https协议打开知乎网页。 请注意,在跳转到webview页面时,需要将要打开的链接进行encodeURIComponent编码,以避免URL中的特殊字符引起的问题。 以上是使用uni-app内置的方法跳转到系统浏览器打开知乎网页的示例代码。您可以根据实际需求进行适当调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值