Таким образом, я работаю над bookmarklet, где это было бы идеально, чтобы я захватил содержание, выбранное пользователем, использующим "цикл". И window.getSelection и document.getSelection являются функциями, которые я могу вызвать, однако, они всегда возвращают пустую строку.
Я полагаю, что проблема состоит в том, что, когда Вы касаетесь на значке закладки в Мобильном Safari, выбор выпущен. Например, при выборе некоторого текста коснитесь "+", закладка или другая вкладка, выбор отменяется выбор, даже если Вы отменяете.
Какие-либо мысли о том, если возможно достигнуть эти данные вообще? Или это в значительной степени невозможно?
Я думаю, вам нужно, чтобы букмарклет вставлял на страницу какой-то контент, который будет работать с выделением. Вы можете добавить кнопку вверху или внизу страницы, и при нажатии она будет воздействовать на текущий выбор. Затем он может очистить добавленный контент или оставить его там.
Содержимое «цикла» не отображается в 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;
}
У вас может быть таймер, выполняющий updateSelection каждые x единиц времени. Если вы найдете хорошее уведомление, которое сообщает, что пользователь взаимодействовал с веб-просмотром, вы можете использовать его для обновления latestSelection.