Используйте Javascript, чтобы получить выделенный текст в Mobile Safari - PullRequest
13 голосов
/ 29 июня 2010

Так что я работаю над букмарклетом, где для меня было бы идеально захватить контент, выбранный пользователем, используя «цикл».И window.getSelection, и document.getSelection являются функциями, которые я могу вызвать, однако они всегда возвращают пустую строку.

Я считаю, что проблема заключается в том, что при нажатии на значок закладки в Mobile Safari выборвышел.Например, если вы выделите какой-либо текст, коснитесь «+», закладки или другой вкладки, выбор не будет выбран, даже если вы отмените.

Есть мысли о том, можно ли вообще получить эти данные?Или это почти невозможно?

Ответы [ 3 ]

1 голос
/ 03 августа 2010

Содержимое «цикла» не подвергается JavaScript в мобильном браузере, точка.Так что это невозможно (я предполагаю, что вы работаете в полном браузере, а не в окне браузера, созданном при запуске значка «сохранено на домашней странице»)

1 голос
/ 29 июня 2010

Я думаю, вам нужно было бы, чтобы букмарклет вставлял на страницу какой-то контент, который бы воздействовал на выбор.Вы можете добавить кнопку вверху или внизу страницы, и при нажатии она будет влиять на текущий выбор.Затем он может очистить добавленный контент или оставить его там.

0 голосов
/ 13 августа 2010

У меня довольно простая идея.

var latestSelection = "";
while (true)
{
    var tmp;
    if ((tmp = document.getSelection()) != "")
        latestSelection = tmp;
}

Таким образом, у вас всегда будет последний выбор в переменной latestSelection.Конечно, было бы дорого, чтобы такой цикл запускался постоянно.Поэтому вам, вероятно, захочется поиграть со слушателями или хотя бы таймерами.

Надеюсь, это поможет.

Обновление: Не используйте приведенный выше код как есть.

Вот как вы могли бы написать то же самое в target-c:

- (void) updateSelection
{
    NSString * tmp = [webView stringByEvaluatingJavaScriptFromString:@"document.getSelection()"];
    if (![tmp isEqualToString:@""])
        latestSelection = tmp;
}

У вас может быть таймер, выполняющий updateSelection каждые x единиц времени.Если вы обнаружите хорошее уведомление о том, что пользователь взаимодействовал с веб-представлением, вы можете использовать его для обновления latestSelection.

...