我正在开发一个书签小工具,希望通过“loop”获取用户选择的内容,使用window.getSelection和document.getSelection这两个函数可以调用,但它们始终返回空字符串。
我认为问题在于,在Mobile Safari中点击书签图标时,选择将被释放。例如,如果您选择了一些文本,点击“+”,书签或其他选项卡,则即使取消,选择也会被取消。
您对是否有可能获取这些数据有什么想法吗?还是说这基本上是不可能的?
我正在开发一个书签小工具,希望通过“loop”获取用户选择的内容,使用window.getSelection和document.getSelection这两个函数可以调用,但它们始终返回空字符串。
我认为问题在于,在Mobile Safari中点击书签图标时,选择将被释放。例如,如果您选择了一些文本,点击“+”,书签或其他选项卡,则即使取消,选择也会被取消。
您对是否有可能获取这些数据有什么想法吗?还是说这基本上是不可能的?
在移动浏览器中,“loop”的内容不会暴露给JavaScript,这是不可能的(我假设您正在完整的浏览器中工作,而不是在启动“保存到主屏幕”图标时创建的浏览器窗口中)。
我认为您需要让书签插件在页面中插入一些内容,以便对所选内容进行操作。您可以在页面顶部或底部添加一个按钮,当单击时,它将对当前选择进行操作。然后,它可以清理添加的内容或将其保留在那里。
我有一个相当简单的想法。
var latestSelection = "";
while (true)
{
var tmp;
if ((tmp = document.getSelection()) != "")
latestSelection = tmp;
}
通过这种方法,您将始终在 latestSelection 变量中拥有最新的选择。当然,一直运行这样的循环是很耗费资源的。因此,您可能需要尝试使用监听器或至少计时器。
希望这可以帮助到您。
更新: 不要直接使用上面的代码。
以下是您如何在 Objective-C 中编写相同的代码:
- (void) updateSelection
{
NSString * tmp = [webView stringByEvaluatingJavaScriptFromString:@"document.getSelection()"];
if (![tmp isEqualToString:@""])
latestSelection = tmp;
}