我试图在提交表单时将简单表单的内容传递给 URL 参数。HTML 代码在在线 HTML 模拟器上工作,但在 wx.html2.WebView 中不起作用。使用 wxPython v4 和 python 3.6。演示问题的代码,
import wx
import wx.html2
class MyBrowser(wx.Dialog):
def __init__(self, *args, **kwds):
wx.Dialog.__init__(self, *args, **kwds)
sizer = wx.BoxSizer(wx.VERTICAL)
self.browser = wx.html2.WebView.New(self)
sizer.Add(self.browser, 1, wx.EXPAND, 10)
self.SetSizer(sizer)
self.SetSize((700, 700))
self.Bind(wx.html2.EVT_WEBVIEW_NAVIGATING, self.OnHTMLNavigate, self.browser)
def OnHTMLNavigate(self, event):
targetUrl = event.GetURL()
print(targetUrl) # format about:<link_info>
event.Veto() # stops the link from executing
if __name__ == '__main__':
app = wx.App()
dialog = MyBrowser(None, -1)
text = """
<!DOCTYPE html>
<html>
<body>
<form action="/action_page.php" method="get">
First name: <input type="text" name="fname"><br>
<input type="submit" value="Submit">
</form>
<p>Click on the submit button, and the input will be sent to a page on the server called "/action_page.php".</p>
</body>
</html>
"""
dialog.browser.SetPage(html=text, baseUrl="")
dialog.Show()
app.MainLoop()
程序的输出是,
about:/action_page.php
而在 html 模拟器中是,
/action_page.php?fname=myname
我想要做的核心是从 html2.WebView 获取信息回到 python 程序。我发现的唯一方法是拦截导航事件,并解析 URL 参数。我在 Rubin 的一篇文章中发现了这种方法。
附带说明一下,我能够使用 javascript 构造通过按钮实现所需的结果,也就是说,URL 告诉我从 web 视图中按下了哪个按钮。这是一个片段,解释了我是如何做到的,
<input id="myButton" type="button" class="button" \
onclick="location.href='action/?type=button&name=myButton&cb=myCallback&text=myButtonLabel';" \
value="myButtonLabel" />
按钮习惯用法对我来说非常有效,因为我能够使用我需要的额外参数构造 URL,例如回调允许我让每个按钮调用不同的回调。理想情况下,我也想用表单来做到这一点。因此,如果有另一种方法(javascript?),我可以使用我的额外信息和文本表单数据创建表单 URL GET 提交响应,我会很感激。
免责声明:无论如何,我都不是网络开发人员。但是我必须通过 webview 呈现......我曾经使用 wxPython html 窗口,但毕业到 html2.webview 以尝试获得更多功能。