Страница: 1 |
|
Вопрос: Контекстное меню IE - "выдёргивание" код
|
Добавлено: 28.03.07 15:16
|
|
Автор вопроса: Сергей
|
Прошу прощения, если эта тема уже обсуждалась, киньте мне ссылки, и я сразу же успокоюсь :-).
Я прописал свой пункт в контекстном меню IE, и при нажатии на этот пункт IE вызывает прописанную в реестре страничку со скриптом (те, кто знает, о чём говорю, поймут). Текст скрипта приведён ниже:
<script type="text/javascript" language="JavaScript1.2">
var parentwin = external.menuArguments;
var doc = parentwin.document;
var sel = doc.selection;
var rng = sel.createRange();
var str = new String(rng.text);
var iStr;
var cURL=doc.URL;
var cCode=doc.documentelEment.Innerhtml;
var cHTML=doc.body.Innerhtml;
var C = new ActiveXObject ("MnPWS.Options");
iStr=C.DefaultFind (str, cURL, cHTML);
</script>
Так вот, что касается выделенного фрагмента, и URL страницы, то это работает просто замечательно, однако ни cCode, ни cHtml - у меня загвоздка. И скорее всего, дело не в регистре... Пробовал разворачивать объект поступенчато - тоже не канает.
Возможно, что таким образом код страницы "выдернуть" не получится. Тогда предложите, пожалуйста, другой способ. У меня уже голова закипает...
Ответить
|
Номер ответа: 2 Автор ответа: Сергей
Вопросов: 4 Ответов: 15
|
Профиль | | #2
|
Добавлено: 29.03.07 03:08
|
Проблема в том, что не работает даже на простенькой html-странице. Да и там, где решается эта задача, фреймы исключены...
Если выводишь полученную переменную в alert();, пишет "undefended". Короче, "на нет и суда нет". . Только мне не смешно. Наверное, нужно сначала создать регион (range), как это делается с выделенным фрагментом. Но то, что я предполагаю, не более, чем гадание на кофейной гуще.
Как понимаю, это вопрос к специалистам по DOM, если не ошибаюсь. Мне бы просто ткнули пальцем (ссылкой), где именно можно ознакомится с решением данной проблемы, пусть без кода, пусть обще, но чтобы было понятно. От MSDN голова кругом - ресурс хорош, когда ищешь ответ на конкретный вопрос. А мой вопрос больше походит на метания по поводу смысла жизни .
Буду очень благодарен за помощь.
Ответить
|
Номер ответа: 5 Автор ответа: Сергей
Вопросов: 4 Ответов: 15
|
Профиль | | #5
|
Добавлено: 02.04.07 12:36
|
Ладно, ответ отыскал сам с очень толковой подсказки одного опытного товарища (огромное ему спасибо)... Оставляю сей фолиант, дабы у сказки был счастливый конец .
Как я понял, innerHTML в IE6 напрямую работать не желает по соображениям безопасности. Или просто глюки MSIE, что для опытного люда не является новостью. А теперь - сам код:
var parentwin = external.menuArguments;
var doc = parentwin.document;
if (doc.body.hasChildNodes())
{
var children = doc.body.childNodes;
for (var i = 0; i < children.length; i++)
{
A = A + ' ' + doc.all.item(i).innerHTML;
};
};
Мне порекомендовали прибегнуть к childNodes (http://developer.mozilla.org/en/docs/DOM:element.childNodes).
Идея довольно-таки неплохая, но "в лоб" не попёрла, видимо, из-за особенностей IE, ибо виделись далеко не все nodeName, а подавляющее большинство nodeValue возвращали null.
Пришлось вспомнить про тег all, и забить на соответствие требованиям W3C. В итоге all.item(i).innerHTML был поставлен на службу и прекрасно с поставленной задачей справился.
Так почему я подумал, что прямую работу innerhtml рабработчики IE6 забанили? А дело в том, что полученную переменную A средствами FSO не записать! Я бился два дня, но так и не нашёл той загадочной причины, что мешала записать полученный результат в файл. Однако, стандартными средствами VB файл лекго записался.
Что из этого следует? А то, что мудилы из MS попытались таким образом заблокировать сохранение исходного кода страницы посредством скриптов. Известно, что FSO - это единственная библиотека, благодаря которой скрипты могут работать с файлами.
Занавес, апплодисменты!
Ответить
|
Страница: 1 |
Поиск по форуму