Pywebview迷你浏览器刷新按钮无法加载含www/语言代码前缀域名求助
问题分析与解决方案
问题原因
你的刷新按钮加载报错,核心问题出在refr()函数对URL的错误处理:
- 盲目替换URL中所有
www.字符串,不管它出现在域名、路径还是参数里,直接破坏了URL的有效性(比如https://www.google.com/search?q=www.test会被改成https://google.com/search?q=.test)。 - 对于带语言子域名的URL(如
https://zh-CN.www.google.com),错误移除www.后会导致域名格式不符合网站要求,触发加载失败。
修复方案
最简单且安全的做法是直接重新加载当前获取的完整URL——window.get_current_url()返回的是当前页面的有效完整URL,直接用它调用load_url()即可正常刷新,不需要做任何手动修改。
修改后的refr()函数:
def refr(): window = ww() url = window.get_current_url() window.load_url(url)
如果确实需要统一处理域名中的www.(比如强制移除),应该通过解析URL结构,只修改域名部分,避免影响URL其他内容:
from urllib.parse import urlparse, urlunparse def refr(): window = ww() url = window.get_current_url() parsed_url = urlparse(url) # 仅移除域名开头的www.前缀 if parsed_url.netloc.startswith('www.'): parsed_url = parsed_url._replace(netloc=parsed_url.netloc[4:]) cleaned_url = urlunparse(parsed_url) window.load_url(cleaned_url)
完整修改后代码
import webview as wb import webview.menu as mm from urllib.parse import urlparse, urlunparse # 处理www时需要添加这行 mp = { 'back': '<--', 'ref': 'Refresh', 'fr': '-->' } file = open('_app_data_\path.txt', 'r') path_c = file.read() file.close() def ww(): return wb.windows[0] def load_ed(): window = ww() if window.get_current_url() != None: window.set_title('Test Browser - ' + window.get_current_url()) else: window.set_title('still loading') def exec(): window = ww() window.events.loaded += load_ed def ok(): print('ok') def refr(): window = ww() url = window.get_current_url() # 方案一:直接刷新原URL window.load_url(url) # 方案二:如果需要移除域名中的www.,注释上面一行,启用下面的代码 # parsed_url = urlparse(url) # if parsed_url.netloc.startswith('www.'): # parsed_url = parsed_url._replace(netloc=parsed_url.netloc[4:]) # cleaned_url = urlunparse(parsed_url) # window.load_url(cleaned_url) men_itm = [ mm.MenuAction(mp['back'], ok), mm.MenuAction(mp['fr'], ok), mm.MenuAction(mp['ref'], refr) ] window = wb.create_window('Test Browser is opening...', url='https://google.com/', resizable=True, min_size=(200, 100), draggable=True, text_select=True) wb.start(menu = men_itm, private_mode=False, storage_path=path_c, func = exec)
内容的提问来源于stack exchange,提问作者cat
相关产品推荐
相关产品推荐

