使用wxPython WebView浏览器版本问题
使用CodeMirror和wxPyhton的WebView创建嵌入客户端的本地代码编辑工具。
版本为wxPython 3.0,CodeMirror 支持的浏览器IE8或以上。
wxPython提供了HtmlWindow,不过HtmlWindow不是一个完全的渲染引擎,没有办法处理css和javascript。这里是用WebView来进行渲染,在Windows上使用Trident Engine,就是IE的内核。使用时调用的是本地安装的IE,通过当前的WebBrowser控件提供,默认是模拟IE7,通过注册表可以进行修改,看这里。
原先在默认的IE7中Tab键有问题,我以为是Tab键发生冲突,后面经过折腾发现了浏览器版本过低,js的解释有问题,终于问题得以解决。
下面是在windows下python修改默认IE版本为IE11,使用_winreg进行注册表的修改,修改完成后,删除修改过的键值
- #coding=utf-8
- import _winreg, sys
- #更改系统默认编码
- reload(sys)
- sys.setdefaultencoding('utf8')
- # 这里需要打开所有权限
- key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,
- r"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", 0, _winreg.KEY_ALL_ACCESS)
- try:
- # 设置注册表python.exe 值为 11000(IE11)
- _winreg.SetValueEx(key, 'python.exe', 0, _winreg.REG_DWORD, 0x00002af8)
- except:
- # 设置出现错误
- print('error in set value!')
- # 用完取消注册表设置
- _winreg.DeleteValue(key, 'python.exe')
- # 关闭打开的注册表
- _winreg.CloseKey(key)
完整的一个sample放入wxPython中, 其中a.html是在本地导入的需要渲染的html文件:
- import wx, wx.html2, os, _winreg
- class MyBrowser(wx.Frame):
- def __init__(self, *args, **kwds):
- wx.Frame.__init__(self, None, -1, "My Frame", size=(300, 300))
- # 这里需要打开所有权限
- self.key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,
- r"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", 0, _winreg.KEY_ALL_ACCESS)
- try:
- # 设置注册表python.exe 值为 11000(IE11)
- _winreg.SetValueEx(self.key, 'python.exe', 0, _winreg.REG_DWORD, 0x00002af8)
- except:
- # 设置出现错误
- print('error in set value!')
- self.browser = wx.html2.WebView.New(self, style=0)
- self.Bind(wx.EVT_CLOSE, self.OnClose)
- def OnClose(self, evt):
- print('close')
- # 用完取消注册表设置
- _winreg.DeleteValue(self.key, 'python.exe')
- # 关闭打开的注册表
- _winreg.CloseKey(self.key)
- evt.Skip()
- if __name__ == '__main__':
- app = wx.App()
- frame = MyBrowser()
- frame.browser.LoadURL(os.path.realpath("a.html"))
- frame.Show()
- app.MainLoop()
使用wxPython WebView浏览器版本问题的更多相关文章
- IE浏览器版本判断 HTML代码
<!--[if IE 6.0]> <div id="noie6" style="z-index: 20002;border: 1px solid #F7 ...
- js判断浏览器类型以及浏览器版本
判断浏览器类型: if navigator.userAgent.indexOf(”MSIE”)>0) {} //判断是否IE浏览器 if(isFirefox=navigator.userAg ...
- javascript判断手机浏览器版本信息
<script type="text/javascript"> /* * 智能机浏览器版本信息: * */ var browser={ versions:functio ...
- .NET 获取客户端的操作系统版本、浏览器版本和IP地址
我们在使用.NET做网站的时候,很多情况下需要需要知道客户端的操作系统版本和浏览器版本,怎样获取客户端的操作系统和浏览器版本呢?我们可以通过分析UserAgent来获取. .NET 获取客户端的操作系 ...
- 设置默认访问项目的客户端的浏览器版本(IE版本)
在项目开发部署中,发现浏览器不兼容现象,在不处理兼容性情况下让用户更好体验(IE浏览器) 我们来设置客户端默认访问项目的浏览器版本 如下所示的是不同IE版本下的效果截图比较: IE5.IE6下: IE ...
- js,onblur后下一个控件获取焦点判断、html当前活跃控件、jquery版本查看、jquery查看浏览器版本、setTimeout&setInterval
需求: input控件在失去焦点后直接做验证,验证通不过的话,显示相应错误.但是如果失去焦点后点击的下个控件是比较特殊的控件(比如,退出系统),那么不执行验证操作,直接退出系统(防止在系统退出前,还显 ...
- [JavaCore] 微信手机浏览器版本判断
公司要做微支付,微信浏览器版本要大于5 package com.garinzhang.web.weixin; import org.apache.commons.lang.StringUtils; i ...
- js判断IE浏览器版本
if(navigator.userAgent.indexOf("MSIE")>0){ if(navigator.userAgent.indexOf("MSIE 6. ...
- js实现判断浏览器版本
//判断浏览器版本是否过低 var ua = navigator.userAgent.toLowerCase(); if (window.ActiveXObject) var IEversion = ...
随机推荐
- 解决Windows8下Cisco Systems VPN Client的Reason 442: Failed to Enable Virtual Adapter错误
Windows8下使用Cisco Systems VPN Client创建的Cisco IPSec VPN无法连接,提示Reason 442: Failed to Enable Virtual Ada ...
- appframework(jqmobi) 3.0 设置
$(document).on("panelunload",'#mainPage',function(e){ alert('dddddd'); }); 1.重写 data-load ...
- ubuntu 13.04 lighttped mysql php
apt-get update sudo apt-get install lighttpd php5-cgi Enable the fastcgi module and the php configur ...
- 使用虚幻引擎中的C++导论(二-UE4基类)
使用虚幻引擎中的C++导论(二) 第一,这篇是我翻译的虚幻4官网的新手编程教程,原文传送门,有的翻译不太好,但大体意思差不多,请支持我O(∩_∩)O谢谢. 第二,某些细节操作,这篇文章省略了,如果有不 ...
- javascript关于闭包变量作用域
在项目中不时会遇到的一些小的问题以及解决办法: 1子函数调用父函数中的变量: 加return: var a=1; function num(){ var b=2; return b; } num()+ ...
- Java串口通信详解
http://blog.csdn.net/kabini/article/details/1601324 ———————————————————————————————————————————————— ...
- VC++ operate excel
利用VC操作Excel的方法至少有两种 1 .利用ODBC把Excel文件当成数据库文件,来进行读.写.修改等操作,网上有人编写了CSpreadSheet类,提供支持. 2. 利用Automation ...
- 在VMware上安装Ubuntu14.04 , Docker
最近在公司做了一个关于 How to use Docker to deploy a java-based website 的KT,总结如下: 准备材料(Linux+64bit) 1. Tomcat安装 ...
- javascript中的innerHTML是什么意思,怎么个用法?
innerHTML在JS是双向功能:获取对象的内容 或 向对象插入内容:如:<div id="aa">这是内容</div> ,我们可以通过 document ...
- KPI
一.综合计划部KPI明细数据查询--xigu用户要求:需显示第三季度,即789三个月的明细数据解决方法:1.查看SSISC:\Users\Administrator\Documents\Visual ...