使用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浏览器版本问题,布布扣,bubuko.com

使用wxPython WebView浏览器版本问题

上一篇:Nodejs安装及环境配置


下一篇:Spring拦截器