gpt4 book ai didi

objective-c - NPAPI 插件 - Mac OS - 打开多个模式对话框时,[NSAlert runModal] 在 Firefox 上无法正常工作

转载 作者:行者123 更新时间:2023-12-03 17:51:27 28 4
gpt4 key购买 nike

我正在开发一些插件,并且在插件加载期间需要用户交互。准确地说,当插件加载时,会显示弹出模式对话框,用户必须通过单击“允许”或“拒绝”来允许(拒绝)插件访问外部设备。

我使用 Firebreath 的方法 FB::BrowserHost::ScheduleOnMainThread 在主线程上安排函数调用“showPopUpAlert”,对于模式对话框,我使用 Cocoa API 调用 [alert runModal] 和 [alert abortModal] 或 [alert stopModal]。

当我在一个选项卡中运行插件时,不要通过单击对话框的按钮进行应答(对话框仍然打开),并尝试在单独的选项卡中再次加载插件,对话框的新实例显示在顶部。然后我无法访问第一个打开的对话框,直到第二个对话框处于事件状态。

如果我单击第二个打开的对话框“允许”或“拒绝”,它将关闭,第一个对话框仍处于事件状态。

当我尝试关闭两个打开的选项卡之一时出现问题。

1) 如果我关闭第二个打开的选项卡,它们的弹出对话框将关闭,并且下面第一个打开的对话框仍将处于事件状态。 2)我尝试关闭第一个打开的选项卡,第二个弹出对话框将关闭,第一个打开的选项卡将处于非事件状态。

这只是 Firefox 的问题,Chrome 和 Safari 工作正常。

在 Chrome 和 Safari 上,如果一个对话框处于事件状态,整个浏览器都会被阻止,并且在打开该对话框之前无法打开新选项卡。

如果能让 Firefox 像 Chrome 和 Safari 一样工作那就太好了。您有什么建议吗?

我尝试访问浏览器窗口并使用 beginSheetModalForWindow 方法,但我在几个主题上读到这是不可能的,因为插件和浏览器在单独的线程中运行。

我的代码依赖于 taxilian's example ,请看一下,如果有人能帮助我,我将非常感激。

问候,l3r

抱歉,如果我不清楚。

我有使用该插件的示例网络应用程序。

当我运行示例应用程序时,会显示一个模式对话框 (NSAlert),其中包含一个问题:“您是否允许插件访问您的外部设备?”可以通过单击“允许”或“拒绝”按钮来回答该问题。

1) 我在 Firefox 的一个选项卡中运行示例应用程序,但没有回答问题,模式对话框仍位于顶部。

2) 我打开一个新选项卡并再次运行示例应用程序,显示新的模式对话框。现在,两个模式对话框出现在另一个前面。

3) 如果我关闭在 1) 中打开的选项卡,则 2) 中的模式对话框将关闭,并且 1) 中的模式对话框将保持非事件状态(无法回答问题)。

如果之前打开了一个模式对话框,或者如果我关闭一个选项卡,我希望阻止浏览器(Firefox)打开新选项卡,而不是关闭顶部的另一个模式对话框。是否可以?您有什么建议吗?

我希望我说得更清楚了。

问候,l3r

最佳答案

实际上不可能通过 NPAPI 插件使对话框成为真正的模态对话框;现代浏览器在单独的进程(而不是线程)中运行插件,并且 OS X 没有办法使对话框跨应用程序模式化。相反,每个浏览器都会近似其行为。

您可以针对 Firefox 提交错误,也许他们可以以不同的方式处理这种情况,但从根本上来说,设计是有缺陷的:强烈建议不要使用插件中的模式对话框,并且不能保证它会正常工作。

更好的解决方案是根本不使用模式对话框,并将您需要的任何 UI 放在插件的范围内,因为 NPAPI 插件旨在使用。

关于objective-c - NPAPI 插件 - Mac OS - 打开多个模式对话框时,[NSAlert runModal] 在 Firefox 上无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25588295/

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