gpt4 book ai didi

python - Kivy Garden - 多个 Chromium 嵌入式浏览器,只能更改第一个创建的浏览器的 URL?

转载 作者:行者123 更新时间:2023-12-01 05:06:22 24 4
gpt4 key购买 nike

在我的代码中,我有一个带有按钮行的 GridLayout - TextInput。我还有一个字典,其中的键代表索引,值存储 CefBrowsers。每当按下按钮时,GridLayout 就会重构,以便该按钮被关联的 CefBrowser 替换。或者,如果还没有创建一个,则构建一个新的浏览器并将其添加到字典中。

制作的每个浏览器都存储在这个字典中(因为从网格中删除/删除浏览器似乎并不能阻止它们在后台运行。例如:音频继续播放),因此每当按下某个按钮时,每个当前现有的浏览器应该将其 URL 更改为“空白站点”。

但是,由于某种原因,任何更改任何 CefBrowser URL 的调用只会更改第一个创建的浏览器的 URL。有什么想法吗?或者我该如何改变这个?

相关代码:

def replaceButton(self, instance):
browserNumber = instance.getIndex()/2
try:
browser = self.activeBrowsers[browserNumber]
browser.change_url(instance.getURL())
except KeyError: #browser doesn't already exist
self.activeBrowsers[browserNumber] = CefBrowser(start_url=instance.getURL(), size_hint_x=1,
size_hint_y=None)
browser = self.activeBrowsers[browserNumber]
self.feed.replace(instance.getIndex(), browser)

def restartFeed(self):
self.feed.empty()
for browser in self.activeBrowsers.values():
print(browser)
browser.change_url('http://blank.org/')
self.readData()

我可以想象replaceButton方法由于逻辑错误而无法工作,但我已经检查了restartFeed中的各个Browser对象,尽管每个对象都是唯一的,但同样,只有第一个似乎更改了其URL。

最佳答案

编辑:这已在 cefpython v31 中修复。

不幸的是,这是 CEFPython 中的一个错误。您只能使用一个 Browser 实例,因为某些方法(例如 LoadUrlExecuteJavascript)始终影响第一个 Browser创建的。 :(

https://code.google.com/p/cefpython/issues/detail?id=97

看起来已经找到修复程序并计划在下一个版本中发布。您可以尝试从源代码下载并构建 CEFPython,如有必要,应用该问题链接中的补丁。

解决此问题的方法是使用正确的起始 URL 创建每个浏览器,然后销毁并重新创建浏览器 以更改 URL。但这是非常低效的。

关于python - Kivy Garden - 多个 Chromium 嵌入式浏览器,只能更改第一个创建的浏览器的 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24935783/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com