Как записать в загружаемую HTML данные?
От: baxus  
Дата: 03.07.06 13:44
Оценка:
Привет всем, задача такая:
Открывается URL, загружается html, в которой присутствует вызов функции (допустим) InitHTML().
Этот вызов должен обработать я, т.е. записать после вызова, например следующее:
...
window.external.framework.InitHTML(); //вызов метода

var variable1 = value1  // то, что
var variable2 = value2  // нужно
....                    // дописать


Так вот вопрос:
1) как это сделать?
2) как обработать сам вызов window.external.framework.InitHTML()?

Заранее всем спасибо!!!
Re: Как записать в загружаемую HTML данные?
От: Константин Л.  
Дата: 03.07.06 15:12
Оценка:
Здравствуйте, baxus, Вы писали:

B>Привет всем, задача такая:

B>Открывается URL, загружается html, в которой присутствует вызов функции (допустим) InitHTML().
B>Этот вызов должен обработать я, т.е. записать после вызова, например следующее:
B>
B>...
B>window.external.framework.InitHTML(); //вызов метода

B>var variable1 = value1  // то, что
B>var variable2 = value2  // нужно
B>....                    // дописать
B>


B>Так вот вопрос:

B>1) как это сделать?
B>2) как обработать сам вызов window.external.framework.InitHTML()?

B>Заранее всем спасибо!!!


MSHTML?
Re[2]: Как записать в загружаемую HTML данные?
От: baxus  
Дата: 04.07.06 09:48
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>Здравствуйте, baxus, Вы писали:


B>>Привет всем, задача такая:

B>>Открывается URL, загружается html, в которой присутствует вызов функции (допустим) InitHTML().
B>>Этот вызов должен обработать я, т.е. записать после вызова, например следующее:
B>>
B>>...
B>>window.external.framework.InitHTML(); //вызов метода

B>>var variable1 = value1  // то, что
B>>var variable2 = value2  // нужно
B>>....                    // дописать
B>>


B>>Так вот вопрос:

B>>1) как это сделать?
B>>2) как обработать сам вызов window.external.framework.InitHTML()?

B>>Заранее всем спасибо!!!


КЛ>MSHTML?


Можно и MSHTML, а дальше то что?
Re[3]: Как записать в загружаемую HTML данные?
От: Константин Л.  
Дата: 04.07.06 11:58
Оценка:
Здравствуйте, baxus, Вы писали:

B>Здравствуйте, Константин Л., Вы писали:


КЛ>>Здравствуйте, baxus, Вы писали:


B>>>Привет всем, задача такая:

B>>>Открывается URL, загружается html, в которой присутствует вызов функции (допустим) InitHTML().
B>>>Этот вызов должен обработать я, т.е. записать после вызова, например следующее:
B>>>
B>>>...
B>>>window.external.framework.InitHTML(); //вызов метода

B>>>var variable1 = value1  // то, что
B>>>var variable2 = value2  // нужно
B>>>....                    // дописать
B>>>


B>>>Так вот вопрос:

B>>>1) как это сделать?
B>>>2) как обработать сам вызов window.external.framework.InitHTML()?

B>>>Заранее всем спасибо!!!


КЛ>>MSHTML?


B>Можно и MSHTML, а дальше то что?


что значит обработать? Подменить метод InitHTML? Вряд-ли что-то можно сделать
Re: Как записать в загружаемую HTML данные?
От: kan_izh Великобритания  
Дата: 04.07.06 12:54
Оценка:
baxus wrote:

> 1) как это сделать?

Если MFC, смотри CHtmlView::GetExternal или IDocHostUIHandler::GetExternal в общем случае. Однако, у меня с этим
проблема
Автор: kan_izh
Дата: 03.07.06


> 2) как обработать сам вызов *window.external.framework.InitHTML()*?


Не совсем понятно, кто такое framework?
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: Как записать в загружаемую HTML данные?
От: baxus  
Дата: 04.07.06 14:57
Оценка:
Здравствуйте, kan_izh, Вы писали:

_>baxus wrote:


>> 1) как это сделать?

_>Если MFC, смотри CHtmlView::GetExternal или IDocHostUIHandler::GetExternal в общем случае. Однако, у меня с этим
_>проблема
Автор: kan_izh
Дата: 03.07.06


>> 2) как обработать сам вызов *window.external.framework.InitHTML()*?


_>Не совсем понятно, кто такое framework?


нет с тем чтобы положить объект в window.external у меня проблем нет.
framework это просто еще один объект, который уже мой, так сказать обертка.
В функцию InitHTML() я уже попадаю, теперь мне надо дописать данные, после ее вызова в тело html, сразу за вызовом, как я писал в начале поста.
Re[4]: Как записать в загружаемую HTML данные?
От: baxus  
Дата: 04.07.06 15:00
Оценка:
Здравствуйте, Константин Л., Вы писали:

B>>>>
B>>>>...
B>>>>window.external.framework.InitHTML(); //вызов метода

B>>>>var variable1 = value1  // то, что
B>>>>var variable2 = value2  // нужно
B>>>>....                    // дописать
B>>>>


B>>>>Так вот вопрос:

B>>>>1) как это сделать?
B>>>>2) как обработать сам вызов window.external.framework.InitHTML()?

КЛ>что значит обработать? Подменить метод InitHTML? Вряд-ли что-то можно сделать

нет подменять не надо, надо сразу за вызовом написать:
window.external.framework.InitHTML(); //вызов метода
var variable1 = value1  // то, что
var variable2 = value2  // нужно
....                    // дописать

т.е. вставить строки, чтобы их обработал IE. А эти переменные я буду использовать где-то ниже.
Re[3]: Как записать в загружаемую HTML данные?
От: kan_izh Великобритания  
Дата: 04.07.06 15:13
Оценка:
baxus wrote:

> нет с тем чтобы положить объект в window.external у меня проблем нет.

> framework это просто еще один объект, который уже мой, так сказать обертка.
> В функцию InitHTML() я уже попадаю, теперь мне надо дописать данные,
> после ее вызова в тело html, сразу за вызовом, как я писал в начале поста.
Ну так верни эти данные из InitHTML:
var data = window.external.framework.InitHTML(); //вызов метода

var variable1 = data.value1  // то, что
var variable2 = data.value2  // нужно
....                    // дописать
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[4]: Как записать в загружаемую HTML данные?
От: baxus  
Дата: 04.07.06 15:59
Оценка:
Здравствуйте, kan_izh, Вы писали:

_>baxus wrote:


>> нет с тем чтобы положить объект в window.external у меня проблем нет.

>> framework это просто еще один объект, который уже мой, так сказать обертка.
>> В функцию InitHTML() я уже попадаю, теперь мне надо дописать данные,
>> после ее вызова в тело html, сразу за вызовом, как я писал в начале поста.
_>Ну так верни эти данные из InitHTML:
_>
_>var data = window.external.framework.InitHTML(); //вызов метода

_>var variable1 = data.value1  // то, что
_>var variable2 = data.value2  // нужно
_>....                    // дописать
_>


Так смысл InitHTML(), чтобы избавиться от таких присвоений, т.е. чтобы они автомвтически
моим методом дописывались.
Re[5]: Как записать в загружаемую HTML данные?
От: kan_izh Великобритания  
Дата: 04.07.06 17:28
Оценка:
baxus wrote:

> Так смысл InitHTML(), чтобы избавиться от таких присвоений, т.е. чтобы

> они автомвтически
> моим методом дописывались.
Хакерство всё это. Зачем тебе такая магия? Смысл? Это не есть структурное программирование. Если очень хочется, можно так:
var variable1
var variable2
window.external.framework.InitHTML(window)

Глобальные переменные (то что у тебя "var variable1") суть проперти объекта window.
В InitHTML делаешь GetIDsOfNames(..., "variable1", ...)/Invoke(..., DISPATCH_PROPERTYPUT, ...) на window-объекте. Но вот
новые проперти нельзя так добавить (вроде, надо проверить). Нужно будет ставить "var variable1; var variable2;..." (и,
вроде, обязательно до InitHTML).
Или можно ещё один хак применить, написать js функцию:
function propertyPut(obj, name, value)
{
  obj[name]=value
}

и из InitHTML дёргать её из Invoke с аргументами (переданный window, "variable1", value1).

Но всё это большая гадость, не используй эти variable1 глобальные переменные, используй хотя бы один глобальный объект
data, если уж совсем никак. Хотя, по уму, external и должен быть этим объектом, просто его не надо делать глобальным на
всё приложение, а он и должен содержать данные для конкретного window.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[6]: Как записать в загружаемую HTML данные?
От: baxus  
Дата: 05.07.06 08:35
Оценка:
Здравствуйте, kan_izh, Вы писали:

_>baxus wrote:


>> Так смысл InitHTML(), чтобы избавиться от таких присвоений, т.е. чтобы

>> они автомвтически
>> моим методом дописывались.
_>Хакерство всё это. Зачем тебе такая магия? Смысл? Это не есть структурное программирование. Если очень хочется, можно так:
_>
_>var variable1
_>var variable2
_>window.external.framework.InitHTML(window)
_>

_>Глобальные переменные (то что у тебя "var variable1") суть проперти объекта window.
_>В InitHTML делаешь GetIDsOfNames(..., "variable1", ...)/Invoke(..., DISPATCH_PROPERTYPUT, ...) на window-объекте. Но вот
_>новые проперти нельзя так добавить (вроде, надо проверить). Нужно будет ставить "var variable1; var variable2;..." (и,
_>вроде, обязательно до InitHTML).
_>Или можно ещё один хак применить, написать js функцию:
_>
_>function propertyPut(obj, name, value)
_>{
_>  obj[name]=value
_>}
_>

_>и из InitHTML дёргать её из Invoke с аргументами (переданный window, "variable1", value1).

_>Но всё это большая гадость, не используй эти variable1 глобальные переменные, используй хотя бы один глобальный объект

_>data, если уж совсем никак. Хотя, по уму, external и должен быть этим объектом, просто его не надо делать глобальным на
_>всё приложение, а он и должен содержать данные для конкретного window.

Все это конечно хорошо, но геморно и не совсем то что мне хотелось бы, должен быть какой-то простой способ.

Хакерство или нет я не знаю, но попытаюсь объяснить для чего это надо, еще раз:
...
<script>
...
// begin
var SomeVar1 = null;
var SomeVar2 = null;
var SomeVar3 = null;
...
try {
     SomeVar1 = window.external.SomeValue1;
     SomeVar2 = window.external.SomeValue2;
     SomeVar3 = window.external.SomeValue3;
     ...
} exept {
     // do something
}
// end
...
</script>
...

Так вот вызов метода InitHTML() должен вставить все, то что между begin-end, тем самым облегчить начальную инициализацию переменных, которые затем будут использоваться где-то дальше.
Re[7]: Как записать в загружаемую HTML данные?
От: kan_izh Великобритания  
Дата: 05.07.06 09:01
Оценка:
baxus wrote:

> Все это конечно хорошо, но геморно и не совсем то что мне хотелось бы,

> должен быть какой-то простой способ.
Зато работает. Проще — вряд ли. Хакерство никогда не просто.

> Хакерство или нет я не знаю, но попытаюсь объяснить для чего это надо,

> еще раз:
Я это понял. И предложил решение. Не понял, правда, зачем оно тебе надо.
Могу ещё функцию предложить:
function getGlobal(name)
{
   try
   {
     return window.external.framework.getGlobal(name)
   }
   catch(e)
   {...}
}

и вместо переменных использовать getGlobal('var1')
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: Как записать в загружаемую HTML данные?
От: baxus  
Дата: 06.07.06 15:50
Оценка:
Спасибо всем кто пытался мне помочь!!!
Проблема решилась, следующи образом:
Необходимо получить интерфейс IHTMLDocument2, затем запросить владельца этого документа.
Владельцем будет IHTMLWindow2 (т.е. window), а потом вызвать метод execScript(), который
позволяет выполнить свой скрипт, как видно из названия. Вот и все
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.