首页 > 代码库 > WPF加载HTML、WPF与JavaScript交互
WPF加载HTML、WPF与JavaScript交互
目录
一、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=http://www.mamicode.com/false;}//屏蔽鼠标右键 "A" && window.event.shiftKey) window.event.returnValue = http://www.mamicode.com/false; //屏蔽shift加鼠标左键新开一网页 "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调用JSprivate void Button_Click(object sender, RoutedEventArgs e){ this.wbrExam.InvokeScript("invokeScript", new object[] { "CS调用JS" });}
JS调用CSwindow.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=http://www.mamicode.com/false;}//屏蔽鼠标右键 "A" && window.event.shiftKey) window.event.returnValue = http://www.mamicode.com/false; //屏蔽shift加鼠标左键新开一网页 "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交互
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。