使用Javascript在Mobile Safari中获取所选文本

时间:2010-06-29 03:33:18

标签: javascript iphone safari selection mobile-safari

所以我正在开发一个书签,我最好使用“循环”来抓取用户选择的内容。 window.getSelection和document.getSelection都是我可以调用的函数,但是,它们总是返回一个空字符串。

我认为问题是当您点按Mobile Safari中的书签图标时,会发布选择。例如,如果您选择某些文字,请点按“+”,书签或其他标签,即使您取消,也会取消选择。

是否有可能获得此数据的任何想法?或者这几乎不可能?

3 个答案:

答案 0 :(得分:1)

我认为你必须让bookmarklet将一些内容插入到将对选择进行操作的页面中。您可以在页面的顶部或底部添加一个按钮,单击它时,它将作用于当前选择。然后它可以清理添加的内容或将其留在那里。

答案 1 :(得分:1)

“循环”的内容在移动浏览器期间不会暴露给javascript。所以这是不可能的(我假设您在完整的浏览器中工作,而不是在启动“保存到主页”图标时创建的浏览器窗口中)

答案 2 :(得分:-1)

我有一个相当简单的想法。

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;
}

您可以让计时器每x个时间单位执行updateSelection。如果您发现一些好的通知让您知道用户已经与webview进行了互动,那么您可以使用它来更新latestSelection。