【发布时间】:2019-04-26 12:51:50
【问题描述】:
我正在使用 android webview 构建一个小浏览器应用程序,我一直在 javascript 中使用window.getSelection() 来获取用户选择的任何文本的性质,并根据选择的类型显示自定义上下文菜单,即无论是范围、克拉、是否在 contenteditable 中等等。
除非选择在 iframe 中,否则这工作正常,然后浏览器安全措施启动并阻止我嗅探使用 window.getSelection() 选择的内容。我该如何解决这个问题?
理想情况下,我需要一种方法来获取有关从 web 视图中选择的内容的更好信息,或者如果这不可能,我需要一种方法来嗅探选择是否发生在 iframe 中,以便我可以禁用我的自定义上下文菜单逻辑并回退到默认的 android 上下文菜单。
更新/进一步澄清 07/05/2019:
似乎我最初的描述不够清楚......
我的目标是在 web 视图中选择内容时具有视觉和功能上的 自定义 菜单,该菜单可以像标准上下文菜单在页面/iframe 等的任何部分中所做的那样剪切/复制/粘贴。例如
我意识到我最初使用 javascript 检测选择类型并执行剪切/复制/粘贴的方法是错误的,因为它会被 iframe 中的跨源安全性阻止。
我需要的是基于原生 android/webview 的方法。我发现我可以通过查看onActionModeStarted 上的mode.getMenu() 中的项目来嗅探webview 中的选择类型。这将允许我在我的自定义菜单 UI 中显示正确的按钮,但我无法手动触发在单击剪切/复制/粘贴时调用的相同逻辑。我以为我找到了webView.performAccessibilityAction(AccessibilityNodeInfo.ACTION_CUT, null); 的解决方案,但这由于某种原因不起作用,所以我想我的问题真的是如何在不使用 JavaScript 的情况下从 webview 手动触发所选文本的剪切/复制/粘贴?或任何其他方法可以让我拥有一个自定义选择菜单,其中包含许多基于所选内容的选项而不会影响浏览器安全限制?
【问题讨论】:
标签: android webview menu selection