使用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进行注册表的修改,修改完成后,删除修改过的键值

  1. #coding=utf-8
  2. import _winreg, sys
  3.  
  4. #更改系统默认编码
  5. reload(sys)
  6. sys.setdefaultencoding('utf8')
  7.  
  8. # 这里需要打开所有权限
  9. key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,
  10. r"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", 0, _winreg.KEY_ALL_ACCESS)
  11. try:
  12. # 设置注册表python.exe 值为 11000(IE11)
  13. _winreg.SetValueEx(key, 'python.exe', 0, _winreg.REG_DWORD, 0x00002af8)
  14. except:
  15. # 设置出现错误
  16. print('error in set value!')
  17.  
  18. # 用完取消注册表设置
  19. _winreg.DeleteValue(key, 'python.exe')
  20. # 关闭打开的注册表
  21. _winreg.CloseKey(key)

完整的一个sample放入wxPython中, 其中a.html是在本地导入的需要渲染的html文件:

  1. import wx, wx.html2, os, _winreg
  2.  
  3. class MyBrowser(wx.Frame):
  4. def __init__(self, *args, **kwds):
  5. wx.Frame.__init__(self, None, -1, "My Frame", size=(300, 300))
  6. # 这里需要打开所有权限
  7. self.key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,
  8. r"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", 0, _winreg.KEY_ALL_ACCESS)
  9. try:
  10. # 设置注册表python.exe 值为 11000(IE11)
  11. _winreg.SetValueEx(self.key, 'python.exe', 0, _winreg.REG_DWORD, 0x00002af8)
  12. except:
  13. # 设置出现错误
  14. print('error in set value!')
  15. self.browser = wx.html2.WebView.New(self, style=0)
  16. self.Bind(wx.EVT_CLOSE, self.OnClose)
  17.  
  18. def OnClose(self, evt):
  19. print('close')
  20. # 用完取消注册表设置
  21. _winreg.DeleteValue(self.key, 'python.exe')
  22. # 关闭打开的注册表
  23. _winreg.CloseKey(self.key)
  24. evt.Skip()
  25.  
  26. if __name__ == '__main__':
  27. app = wx.App()
  28. frame = MyBrowser()
  29. frame.browser.LoadURL(os.path.realpath("a.html"))
  30. frame.Show()
  31. app.MainLoop()

使用wxPython WebView浏览器版本问题的更多相关文章

  1. IE浏览器版本判断 HTML代码

    <!--[if IE 6.0]> <div id="noie6" style="z-index: 20002;border: 1px solid #F7 ...

  2. js判断浏览器类型以及浏览器版本

    判断浏览器类型:   if navigator.userAgent.indexOf(”MSIE”)>0) {} //判断是否IE浏览器 if(isFirefox=navigator.userAg ...

  3. javascript判断手机浏览器版本信息

    <script type="text/javascript"> /* * 智能机浏览器版本信息: * */ var browser={ versions:functio ...

  4. .NET 获取客户端的操作系统版本、浏览器版本和IP地址

    我们在使用.NET做网站的时候,很多情况下需要需要知道客户端的操作系统版本和浏览器版本,怎样获取客户端的操作系统和浏览器版本呢?我们可以通过分析UserAgent来获取. .NET 获取客户端的操作系 ...

  5. 设置默认访问项目的客户端的浏览器版本(IE版本)

    在项目开发部署中,发现浏览器不兼容现象,在不处理兼容性情况下让用户更好体验(IE浏览器) 我们来设置客户端默认访问项目的浏览器版本 如下所示的是不同IE版本下的效果截图比较: IE5.IE6下: IE ...

  6. js,onblur后下一个控件获取焦点判断、html当前活跃控件、jquery版本查看、jquery查看浏览器版本、setTimeout&setInterval

    需求: input控件在失去焦点后直接做验证,验证通不过的话,显示相应错误.但是如果失去焦点后点击的下个控件是比较特殊的控件(比如,退出系统),那么不执行验证操作,直接退出系统(防止在系统退出前,还显 ...

  7. [JavaCore] 微信手机浏览器版本判断

    公司要做微支付,微信浏览器版本要大于5 package com.garinzhang.web.weixin; import org.apache.commons.lang.StringUtils; i ...

  8. js判断IE浏览器版本

    if(navigator.userAgent.indexOf("MSIE")>0){ if(navigator.userAgent.indexOf("MSIE 6. ...

  9. js实现判断浏览器版本

    //判断浏览器版本是否过低 var ua = navigator.userAgent.toLowerCase(); if (window.ActiveXObject) var IEversion = ...

随机推荐

  1. 解决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 ...

  2. appframework(jqmobi) 3.0 设置

    $(document).on("panelunload",'#mainPage',function(e){ alert('dddddd'); }); 1.重写 data-load ...

  3. ubuntu 13.04 lighttped mysql php

    apt-get update sudo apt-get install lighttpd php5-cgi Enable the fastcgi module and the php configur ...

  4. 使用虚幻引擎中的C++导论(二-UE4基类)

    使用虚幻引擎中的C++导论(二) 第一,这篇是我翻译的虚幻4官网的新手编程教程,原文传送门,有的翻译不太好,但大体意思差不多,请支持我O(∩_∩)O谢谢. 第二,某些细节操作,这篇文章省略了,如果有不 ...

  5. javascript关于闭包变量作用域

    在项目中不时会遇到的一些小的问题以及解决办法: 1子函数调用父函数中的变量: 加return: var a=1; function num(){ var b=2; return b; } num()+ ...

  6. Java串口通信详解

    http://blog.csdn.net/kabini/article/details/1601324 ———————————————————————————————————————————————— ...

  7. VC++ operate excel

    利用VC操作Excel的方法至少有两种 1 .利用ODBC把Excel文件当成数据库文件,来进行读.写.修改等操作,网上有人编写了CSpreadSheet类,提供支持. 2. 利用Automation ...

  8. 在VMware上安装Ubuntu14.04 , Docker

    最近在公司做了一个关于 How to use Docker to deploy a java-based website 的KT,总结如下: 准备材料(Linux+64bit) 1. Tomcat安装 ...

  9. javascript中的innerHTML是什么意思,怎么个用法?

    innerHTML在JS是双向功能:获取对象的内容 或 向对象插入内容:如:<div id="aa">这是内容</div> ,我们可以通过 document ...

  10. KPI

    一.综合计划部KPI明细数据查询--xigu用户要求:需显示第三季度,即789三个月的明细数据解决方法:1.查看SSISC:\Users\Administrator\Documents\Visual ...