Используйте Javascript для получения выделенного текста в Mobile Safari
Итак, я работаю над букмарклетом, где было бы идеально для меня захватить контент, выбранный пользователем, используя "loop". И window.getSelection, и document.getSelection - это функции, которые я могу вызвать, однако они всегда возвращают пустую строку.
Я считаю, что проблема заключается в том, что при нажатии на значок закладки в Mobile Safari выбор отпущен. Например, если вы выберете какой-либо текст, нажмите "+", закладку или другую вкладку, выбор не выбран, даже если вы отмените.
Любые мысли о том, можно ли вообще получить эти данные? Или это практически невозможно?
Ответы
Ответ 1
Я думаю, вам нужно было бы, чтобы букмарклет вставлял какой-то контент в страницу, которая будет работать с выбором. Вы можете добавить кнопку в верхнюю или нижнюю часть страницы, а при нажатии она будет действовать на текущий выбор. Затем он может очистить добавленный контент или оставить его там.
Ответ 2
Содержимое "цикла" не подвергается JavaScript в мобильном браузере, период. Так что это невозможно (я предполагаю, что вы работаете в полном браузере, а не в окне браузера, созданного при запуске значка "сохраненная на домашней странице" ).
Ответ 3
У меня довольно простая идея.
var latestSelection = "";
while (true)
{
var tmp;
if ((tmp = document.getSelection()) != "")
latestSelection = tmp;
}
Таким образом, у вас всегда будет последний выбор в переменной latestSelection. Конечно, было бы дорого, если бы цикл работал так все время. Таким образом, вы, вероятно, захотите поиграть со слушателями или, по крайней мере, с таймерами.
Надеюсь, что это поможет.
Update:
Не используйте приведенный выше код как есть.
Вот как вы могли бы написать одно и то же в objective-c:
- (void) updateSelection
{
NSString * tmp = [webView stringByEvaluatingJavaScriptFromString:@"document.getSelection()"];
if (![tmp isEqualToString:@""])
latestSelection = tmp;
}
У вас может быть таймер выполнить updateSelection каждые х единиц времени. Если вы найдете хорошее уведомление, которое сообщит вам, что пользователь взаимодействовал с веб-просмотром, вы можете использовать его для обновления последней версии.