目录

一、WebBrowser加载远程网页

二、WebBrowser加载本地网页,注:不可以加载本地样式CSS和脚本JS文件

三、WebBrowser隐藏网页的JavaScript错误

四、网页屏蔽鼠标右键、Ctrl+N、Shift+F10、F11、F5刷新、退格键

五、WPF程序与网页JavaScript交互

六、创建服务器,提供数据接口、Script、CSS文件


一、WebBrowser加载远程网页

wbrExam.Source = new Uri("http://cnblogs.com/sntetwt");

二、WebBrowser加载本地网页,注:不可以加载本地样式CSS和脚本JS文件

Uri uri = new Uri("pack://application:,,,/WPFSctipt;component/res/template.html", UriKind.Absolute);
Stream source = Application.GetResourceStream(uri).Stream;
wbrExam.NavigateToStream(source);

三、WebBrowser隐藏网页的JavaScript错误

this.wbrExam.SuppressScriptErrors(true);
/// <summary>
/// WebBrowser隐藏网页的JavaScript错误
/// </summary>
public static class WebBrowserExtensions
{
public static void SuppressScriptErrors(this WebBrowser webBrowser, bool hide)
{
FieldInfo fiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic);
if (fiComWebBrowser == null) return; object objComWebBrowser = fiComWebBrowser.GetValue(webBrowser);
if (objComWebBrowser == null) return; objComWebBrowser.GetType().InvokeMember("Silent", BindingFlags.SetProperty, null, objComWebBrowser, new object[] { hide });
}
}

四、网页屏蔽鼠标右键、Ctrl+N、Shift+F10、F11、F5刷新、退格键

<script type="text/javascript">
//屏蔽鼠标右键、Ctrl+N、Shift+F10、F11、F5刷新、退格键
document.oncontextmenu = function(){event.returnValue=false;}//屏蔽鼠标右键
window.onhelp = function(){return false} //屏蔽F1帮助
document.onkeydown = function()
{
if ((window.event.altKey)&&
((window.event.keyCode==37) || //屏蔽 Alt+ 方向键 ←
(window.event.keyCode == 39))) { //屏蔽 Alt+ 方向键 →
event.returnValue = false;
return false;
}
/* 注:这还不是真正地屏蔽Alt+方向键,
    因为Alt+方向键弹出警告框时,按住Alt键不放,
    用鼠标点掉警告框,这种屏蔽方法就失效了。*/
if ((event.keyCode==8) || //屏蔽退格删除键
(event.keyCode==116) || //屏蔽 F5 刷新键
(event.ctrlKe && event.keyCode==82)) { //Ctrl + R
event.keyCode=0;
event.returnValue=false;
}
if (event.keyCode==122){event.keyCode=0;event.returnValue=false;} //屏蔽F11
if (event.ctrlKey && event.keyCode==78) event.returnValue=false; //屏蔽Ctrl+n
if (event.shiftKey && event.keyCode==121)event.returnValue=false; //屏蔽shift+F10
if (window.event.srcElement.tagName == "A" && window.event.shiftKey)
window.event.returnValue = false; //屏蔽shift加鼠标左键新开一网页
if ((window.event.altKey)&&(window.event.keyCode==115)){ //屏蔽Alt+F4
window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px");
return false;
}
}
</script>

五、WPF程序与网页JavaScript交互

public void Message(string str)
{
MessageBox.Show(str);
}
/// <summary>
/// WebBrowser与JavaScript交互
/// </summary>
[System.Runtime.InteropServices.ComVisible(true)]
public class OprateBasic
{
private MainWindow instance;
public OprateBasic(MainWindow instance)
{
this.instance = instance;
}
//提供给JS调用
public void HandleMessage(string p)
{
instance.Message(p);
}
}
//CS调用JS
private void Button_Click(object sender, RoutedEventArgs e)
{
this.wbrExam.InvokeScript("invokeScript", new object[] { "CS调用JS" });
}

  

JS调用CS
window.external.HandleMessage("JS调用CS");

  

//提供给CS调用
function invokeScript(args) {
alert(args);
}

六、创建服务器,提供数据接口、Script、CSS文件

总结:因为加载HTML文件的时候,HTML没有路径,所以加载不了JS和CSS等外部文件

创建远程站点提供数据接口和外部文件

完整的CS程序如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Reflection; namespace WPFSctipt
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_ContentRendered(object sender, EventArgs e)
{ //加载远程网页
//wbrExam.Source = new Uri("http://cnblogs.com/sntetwt"); Uri uri = new Uri("pack://application:,,,/WPFSctipt;component/res/template.html", UriKind.Absolute);
Stream source = Application.GetResourceStream(uri).Stream;
//WebBrowser隐藏网页的JavaScript错误
this.wbrExam.SuppressScriptErrors(true);
//WebBrowser与JavaScript交互
this.wbrExam.ObjectForScripting = new OprateBasic(this);
//加载本地HTML文件
wbrExam.NavigateToStream(source);
}
public void Message(string str)
{
MessageBox.Show(str);
}
/// <summary>
/// WebBrowser与JavaScript交互
/// </summary>
[System.Runtime.InteropServices.ComVisible(true)]
public class OprateBasic
{
private MainWindow instance;
public OprateBasic(MainWindow instance)
{
this.instance = instance;
}
//提供给JS调用
public void HandleMessage(string p)
{
instance.Message(p);
}
}
//CS调用JS
private void Button_Click(object sender, RoutedEventArgs e)
{
this.wbrExam.InvokeScript("invokeScript", new object[] { "CS调用JS" });
}
}
/// <summary>
/// WebBrowser隐藏网页的JavaScript错误
/// </summary>
public static class WebBrowserExtensions
{
public static void SuppressScriptErrors(this WebBrowser webBrowser, bool hide)
{
FieldInfo fiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic);
if (fiComWebBrowser == null) return; object objComWebBrowser = fiComWebBrowser.GetValue(webBrowser);
if (objComWebBrowser == null) return; objComWebBrowser.GetType().InvokeMember("Silent", BindingFlags.SetProperty, null, objComWebBrowser, new object[] { hide });
}
}
}

  

ASMX文件代码

<Window x:Class="WPFSctipt.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WPF加载HTML、WPF与JavaScript交互" Height="600" Width="800" ContentRendered="Window_ContentRendered">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="500"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<WebBrowser Grid.Row="0" Name="wbrExam" Height="500" VerticalAlignment="Top" Width="800"/>
<Button Grid.Row="1" Content="CS调用JS" VerticalAlignment="Top" Width="200" Height="40" Margin="10" Click="Button_Click" />
</Grid>
</Window>

  

HTML代码

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=8" />
<title></title>
<style type="text/css">
body{background:red;}
.div{height:400px;}
</style>
<script type="text/javascript" src="http://common.cnblogs.com/script/jquery.js"></script>
<script type="text/javascript">
//屏蔽鼠标右键、Ctrl+N、Shift+F10、F11、F5刷新、退格键
document.oncontextmenu = function(){event.returnValue=false;}//屏蔽鼠标右键
window.onhelp = function(){return false} //屏蔽F1帮助
document.onkeydown = function()
{
if ((window.event.altKey)&&
((window.event.keyCode==37) || //屏蔽 Alt+ 方向键 ←
(window.event.keyCode == 39))) { //屏蔽 Alt+ 方向键 →
event.returnValue = false;
return false;
}
/* 注:这还不是真正地屏蔽Alt+方向键,
因为Alt+方向键弹出警告框时,按住Alt键不放,
用鼠标点掉警告框,这种屏蔽方法就失效了。*/
if ((event.keyCode==8) || //屏蔽退格删除键
(event.keyCode==116) || //屏蔽 F5 刷新键
(event.ctrlKe && event.keyCode==82)) { //Ctrl + R
event.keyCode=0;
event.returnValue=false;
}
if (event.keyCode==122){event.keyCode=0;event.returnValue=false;} //屏蔽F11
if (event.ctrlKey && event.keyCode==78) event.returnValue=false; //屏蔽Ctrl+n
if (event.shiftKey && event.keyCode==121)event.returnValue=false; //屏蔽shift+F10
if (window.event.srcElement.tagName == "A" && window.event.shiftKey)
window.event.returnValue = false; //屏蔽shift加鼠标左键新开一网页
if ((window.event.altKey)&&(window.event.keyCode==115)){ //屏蔽Alt+F4
window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px");
return false;
}
}
</script>
<script type="text/javascript">
$(function () {
$("div").text("JavaScript被执行");
window.external.HandleMessage("JS调用CS");
})
function invokeScript(args) {
alert(args);
}
</script>
</head>
<body>
<div class="div"></div>
</body>
</html>

  

WPF加载HTML、WPF与JavaScript交互的更多相关文章

  1. WPF加载等待动画

    原文:WPF加载等待动画 原文地址:https://www.codeproject.com/Articles/57984/WPF-Loading-Wait-Adorner 界面遮罩 <UserC ...

  2. WPF加载Winform窗体时 报错:子控件不能为顶级窗体

    一.wpf项目中引用WindowsFormsIntegration和System.Windows.Forms 二.Form1.Designer.cs 的 partial class Form1 设置为 ...

  3. WPF 加载等待动画

    原文:WPF 加载等待动画 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_29844879/article/details/80216587 ...

  4. js文件加载太慢,JavaScript文件加载加速

    原文出自:https://blog.csdn.net/seesun2012 js脚本加载太慢,JavaScript脚本加载加速(亲测有效) 测试背景: JS文件大小:6.1kB 传统形式加载js文件: ...

  5. WPF加载程序集中字符串资源

    WPF资源 WPF资源使用其实的也是resources格式嵌入资源,默认的资源名称为"应用程序名.g.resources",不过WPF资源使用的pack URI来访问资源. 添加图 ...

  6. WPF 加载 WINFORM控件 异常: 调度程序进程已挂起,但消息仍在处理中

    在加载TradeAtServer的统计中的 单个合约盈亏情况 异常:,调度程序进程已挂起,但消息仍在处理中 发现可能是属性设置引发的问题 比如DateTimePikcer.Value+= set, g ...

  7. RequireJS加载ArcGIS API for JavaScript

    1.在main.js中配置ArcGIS API for JavaScript require.config({ paths : { //arcgisJS "esri": " ...

  8. 网页加载进度的实现--JavaScript基础

    总结了一些网页加载进度的实现方式…… 1.定时器实现加载进度 <!DOCTYPE html><html lang="en"><head> < ...

  9. js怎么动态加载js文件(JavaScript性能优化篇)

    下面介绍一种JS代码优化的一个小技巧,通过动态加载引入js外部文件来提高网页加载速度 [基本优化] 将所有需要的<script>标签都放在</body>之前,确保脚本执行之前完 ...

随机推荐

  1. win10镜像重装,快速设置之后无限重启怎么办?

    我得操作过程: 1.下载老毛桃最win8pe装机版 2.安装老毛桃到U盘, 3.格式化U盘,用extFat格式,拷贝win10镜像文件(你也可以拷贝到硬盘上) 4.插入电脑,通过U盘启动,进入PE 5 ...

  2. 一个最简单的通过WireShark破解SSL加密网络数据包的方法

    原文地址: http://article.yeeyan.org/view/530101/444688 一般来说,我们用WireShark来抓取包进行分析是没有多大问题的.但这里有个问题是,如果你碰到的 ...

  3. android iOS 编码问题害死人!

    android 与后端服务器进行通信时,默认使用的编码格式是asi. 而iOS与后端通信时,获取的数据到iOS端默认被utf-8进行编码.所以,我们常常出现android能够从服务器端获取到数据,但是 ...

  4. C#高级编程小结

    小结 这几章主要介绍了如何使用新的dynamic类型,还讨论了编译器在遇到dynamic类型时会做什么.还讨论了DLP,可以把它包含在简单的应用程序中.并通过Pythin使用DLR,执行Python脚 ...

  5. Netty 包头

    LengthFieldBasedFrameDecoder 常用的处理大数据分包传输问题的解决类,先对构造方法LengthFieldBasedFrameDecoder中的参数做以下解释说明 maxFra ...

  6. java去除数组中重复的元素方法总结

    /* * ArrayUnique.java * Version 1.0.0 * Created on 2017年12月16日 * Copyright ReYo.Cn */ package reyo.s ...

  7. Java CMYK图片转RGB图片(TwelveMonkeys方式)

    TwelveMonkeys的使用比较简单,只要把相关的jar包加入到类路径,他的类我们基本不会用到,只要使用jdk ImageIO或其上层的接口就行了.jdk的ImageIO有自动发现功能,会自动查找 ...

  8. 找不到"javax.servlet.annotation.WebServlet"解决方法

    以前创建的一个项目,打开的时候总是报错. import javax.servlet.annotation.WebServlet; 后来想起当时这个项目是发布在tomcat7.0下面的, 也就是说当时这 ...

  9. Java中线程池,你真的会用吗?

    在<深入源码分析Java线程池的实现原理>这篇文章中,我们介绍过了Java中线程池的常见用法以及基本原理. 在文中有这样一段描述: 可以通过Executors静态工厂构建线程池,但一般不建 ...

  10. 在LaTeX中使用颜色 Using colours in LaTeX

    Using colours in LaTeX There are several elements in LATEX whose colour can be changed to improve th ...