Используйте JavaScript для получения выделенного текста в Мобильном Safari

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

Я полагаю, что проблема состоит в том, что, когда Вы касаетесь на значке закладки в Мобильном Safari, выбор выпущен. Например, при выборе некоторого текста коснитесь "+", закладка или другая вкладка, выбор отменяется выбор, даже если Вы отменяете.

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

13
задан Nirmal 29 June 2010 в 03:33
поделиться

3 ответа

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

1
ответ дан 2 December 2019 в 02:29
поделиться

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

1
ответ дан 2 December 2019 в 02:29
поделиться

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

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

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

-1
ответ дан 2 December 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: