# DOM 支持
从5.0开始, pywebview 支持基本的DOM操作、遍历操作和DOM事件。更多的例子请参看:DOM 事件, DOM Manipulation 和 DOM Traversal.
# 全局对象
webview.dom.window # 返回序列化的Javascript窗口对象
webview.dom.document # 返回序列化的Javascript文档对象
# 创建元素
element = window.dom.create_element('<div>new element</div>') # 插入新元素作为body的最后一个子元素
element = window.dom.create_element('<h1>Warning</h1>' parent='#container', mode=ManipulationMode.FirstChild) # 将新元素作为第一个子元素插入#containear
Manipulation Mode 的值可以是 LastChild
, FirstChild
, Before
, After
或 Replace
。默认值为: LastChild
。
# 获取元素
element = window.dom.get_element('#element-id') # 返回第一个匹配的元素,或者None
elements = window.dom.get_elements(selector: str) # 返回匹配的元素列表
# 元素基本信息
element.id # 返回元素的ID
element.classes # 返回元素的class
element.style # 返回元素的style
element.tabindex # 元素的返回元素的tabindex
element.tag # 返回元素的tag name
element.text # 返回元素的文本
element.value # 返回输入元素的值
可以设置或修改某些元素的属性
element.id = 'new-id'
element.classes.remove('red-background') # 移除样式类.red-background
element.classes.toggle('blue-border') # 切换样式 .blue-border
element.style['width'] = '200px'
element.tabindex = 108
element.text = 'New content'
element.value = 'Luna'
# 控制元素
new_container = window.get_element('#new-container')
new_element = element.copy() # 将元素复制为父元素的最后一个子元素
yet_another_element = new_element.copy(new_container, webview.dom.ManipulationMode.FirstChild, "new-id") # 将元素作为第一个子元素复制到#new-id容器
yet_another_element = yet_another_element.move('#new-container2') #将元素作为最后一个子元素移动到#new-container2
yet_another_element.remove() # 移除元素
new_container.empty() # 清空 #new-container 的子元素
new_container.append('<span>kick-ass content</span>') # 添加一个dom到#new-container
# 遍历
element.children # 返回元素的子元素
element.next # 返回DOM层次结构中的下一个元素或None
element.parent # 返回元素的父元素
element.previous # 返回DOM层次结构中的前一个元素或None
# 元素可见性和焦点
element.hide() # 隐藏元素
print(element.visible) # False
element.show() # 显示元素
print(element.visible) # True
element.toggle() # 切换可见性
element.focus() # 聚焦元素
print(element.focused) # 返回True如果元素被聚焦
element.blur() # 元素失去焦点
print(element.focused) # False
# 事件
DOM 事件可以直接通过python注册
def print_handler(e):
print(e)
def shout_handler():
print('!!!!!!!!')
print(e)
print('!!!!!!!!')
element.on('click', print_handler)
element.events.click += shout_handler # these two ways to unsubscribe from events are equivalent
element.off('click', print_handler)
element.events.click -= shout_handler # as well as these two
pywebview 增强了drop
事件以支持完整的文件路径信息
window.dom.document.events.drop += lambda e: print(e['domTransfer']['files'][0]) # 打印已拖拽窗口的文件的完整路径信息