为什么signInWithPopup()不能与pywebview一起使用?

问题描述 投票:0回答:3

我正在尝试使用 firebase 进行 google 登录,并尝试通过 pywebview 加载页面。

from tkinter import *
import webview as webview
root = Tk()
win_width = root.winfo_screenwidth()               
win_height = root.winfo_screenheight()
root.geometry("%dx%d" % (win_width, win_height))
webview.create_window(title='My Window', url='http://localhost:81',confirm_close=True)
webview.start()
root.destroy()

当使用浏览器打开时,它工作正常,但是当使用我的代码打开并单击登录时,它显示以下消息

无法与弹出窗口建立连接。它可能已被浏览器阻止。

image

解决办法是什么?

python firebase firebase-authentication google-signin pywebview
3个回答
0
投票

此错误消息通常是由于浏览器的弹出窗口阻止程序阻止弹出窗口打开而引起的。要解决此问题,您可以尝试禁用浏览器中的弹出窗口阻止程序或将浏览器配置为允许来自本地主机域的弹出窗口。

另一个解决方案是使用不同的库为您的 webview 创建一个窗口,例如

pywebview
,它允许您创建一个禁用 JavaScript 的窗口。这有助于防止浏览器的安全功能阻止弹出窗口。

您可以尝试在创建窗口之前添加以下几行代码

webview.config.use_native_window = False
webview.config.guest_instance_handler = 'xwalk'

此外,为了使本地主机正常工作,您需要在本地主机上运行应用程序。您可以使用任何本地服务器,例如 XAMPP 或

python -m http.server
命令。

您还可以尝试使用 IP 地址而不是本地主机,看看是否有效。


0
投票

发生什么事了?

正如错误消息所示,您使用

webview
库(或者实际上是 渲染器)的浏览器很可能不允许弹出窗口。

您提供的代码不会触发任何弹出窗口,但正如您在标签中提到的 Firebase 身份验证,我相信它会发生在这个阶段。

解决方案

如果确实在 Firebase 身份验证期间发生此问题,最简单的解决方案是使用

auth.signInWithRedirect()
而不是
auth.signInWithPopup()
(有关更多信息,请参阅 文档)。

如果您一般关心弹出窗口,您可以尝试更改渲染器设置甚至渲染器本身,但是,这会更麻烦。


-1
投票

我以前也遇到过这种情况,原因是 webview 的默认选项不允许弹出窗口。 您可以在创建窗口时添加 new_instance: True,这样就允许 webview 打开新窗口。

webview.create_window(title='My Window', 
url='http://localhost:81',confirm_close=True, new_instance=True)

或另一个选项,您可以检查您的浏览器是否阻止弹出窗口,如果是,则允许它们。

© www.soinside.com 2019 - 2024. All rights reserved.