1 (изменено: Rom5, 2017-08-08 23:20:19)

Тема: JS (ie): похоже перестал работать код ...selection.createRange().text

Коллеги, есть предположение, что либо после обновления IE11 перестал работать много лет назад написаный javascript-код получения с web-страницы выделеного текста, либо где-то дурак, но не пойму где .
Т.е. код типа такого:
javascript


var parentwin = external.menuArguments;     // получаем объект окна
var doc = parentwin.document;               // получаем объект документа
var sel = doc.selection.createRange().text; // получаем текст выделения

Сей код у меня встречается во многих html-примочках, работающих в качестве контекстного меню в IE, т.е. на некой web-странице по правой клавише мыши вызываешь различные скрипты применяемые к выделенному тексту (скан машины / поиск у/з в AD / конвертации текста / набор телефона и т.п.).
Начали жаловаться, что перестало работать, а, т.к. недавно было централизованное обновление на win-7 IE (11.0.9600.17843, update безопасности: 11.0.20) - грешу пока на него.

Пошаговое выполнение кода дает всегда на последней строке (... selection.createRange().text) неопределенное значение, вернее - вылет на catch() в блоке try{}.

Как  ни странно, но проблему обошел "костылём" - вызовом аналогичного функционала, но написанного на vbscript, т.е. добавил vbs-функцию и вызываю ее из своего js-кода.
vbscript


Function uf_htmlGetSelection() ' 08.08.2017 получение из вызвавшего html-документа выделенного текста'
	Dim ret
	ret = window.external.menuArguments.document.selection.createRange().text
	uf_htmlGetSelection = Trim( ret )
END FUNCTION

Прийдется попереписывать утилитки на vbs-костыль, но непонятно само происхождение проблемы.
Какие-то идеи есть? Кто-то с аналогичным сталкивался?

WBR. Roman

2 (изменено: teadrinker, 2017-08-09 00:12:17)

Re: JS (ie): похоже перестал работать код ...selection.createRange().text

Возможно, причина в этом:

MSDN пишет:

selection object

[selection is no longer supported. Starting with Internet Explorer 11, use getSelection. For info, see Compatibility changes.]

Используйте


var parentwin = external.menuArguments;     // получаем объект окна
var doc = parentwin.document;               // получаем объект документа
if (doc.getSelection) var sel = doc.getSelection().toString();  // получаем текст выделения
else sel = doc.selection.createRange().text;
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: JS (ie): похоже перестал работать код ...selection.createRange().text

Понял, спасибо большое!

WBR. Roman