我是Python编程的新手,所以请耐心等待。
我有一个包含多个div图层的HTML文件。此文件在webkit.WebView对象中打开。单击时,每个div层都会在全局变量(JavaScript)中保存一个值。
如何从Python脚本中读取该全局JavaScript变量的值?
我找到了一些答案,但它们似乎不符合我的情况(但我当然可能是错的):
Passing JavaScript variable to Python
Parse JavaScript variable with Python
[编辑]
我正在使用webkit.WebView,因为我必须在现有的glade(libglade)应用程序中显示它。
答案 0 :(得分:0)
试一试。它使用addToJavaScriptWindowObject方法将QObject添加到QWebView中。这将启用您的python脚本与Webview中的HMTL / Javascript之间的通信。下面的示例将允许您通过JavaScript提示将javascript全局变量消息的值更改为您想要的任何值,然后每当您单击Python Print Message链接时,它将执行将获取javascript值并且只打印的python代码它到控制台。
import sys
from PyQt4 import QtCore, QtGui, QtWebKit
HTML = """
<html><body onload="broker.print_msg(message)">
<script>var message = 'print_msg message'</script>
<a href="javascript:message=prompt('Enter Message')">Change Message</a><br/>
<a href="javascript:broker.print_msg(message)">Python Print Message</a>
</body></html>
"""
class Broker(QtCore.QObject):
@QtCore.pyqtSlot(str)
def print_msg(self, data):
print data
app = QtGui.QApplication(sys.argv)
view = QtWebKit.QWebView()
view.page().mainFrame().addToJavaScriptWindowObject('broker', Broker(view))
view.setHtml(HTML)
window = QtGui.QMainWindow()
window.setCentralWidget(view)
window.show()
sys.exit(app.exec_())
答案 1 :(得分:0)
我知道这是一个古老的问题,但仍然回答它,希望它对某人有用。
您可以使用警报处理程序并读取python端的值。 http://webkitgtk.org/reference/webkitgtk/stable/webkitgtk-webkitwebview.html#WebKitWebView-script-alert
按钮点击示例您可以执行
操作 alert("Button Clicked");
在python端,您将收到警报通知,您可以解析该字符串。如果对象不是简单对象,则必须将其转换为可在python端解析的字符串格式。我见过几个警报处理程序的例子。 https://github.com/nhrdl/notesMD/blob/master/notesmd.py是我编写的,使用警报处理程序在javascript和python之间传递大量数据