Полезная информация

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№110-05-2010 00:04:47

int0
Участник
 
Группа: Members
Зарегистрирован: 09-05-2010
Сообщений: 3
UA: Firefox 3.6

Доступ к DOM из npapi плагина

Здравствуйте. Подскажите пожалуйста, как можно обращаться к DOM модели html страницы в NPAPI плагине. Например, мне надо в плагине найти какой то определенный элемент страницы, как это сделать?

Отсутствует

 

№210-05-2010 02:47:38

banbot
Moderator
 
Группа: Moderators
Зарегистрирован: 23-12-2007
Сообщений: 5253
UA: Minefield 3.7

Re: Доступ к DOM из npapi плагина


Do you feel lucky, punk?

Отсутствует

 

№310-05-2010 11:44:33

int0
Участник
 
Группа: Members
Зарегистрирован: 09-05-2010
Сообщений: 3
UA: Firefox 3.6

Re: Доступ к DOM из npapi плагина

Правильно ли я понимаю, что это будет совместимо только с ff ? Например, для Chrome работать не будет?
Нашел на одном форуме :

The API to use is called NPRuntime, it's part of NPAPI. Reference is at https://developer.mozilla.org/en/Gecko_Plugin_API_Reference/Scripting_plugins

Getting a hold of DOM is described under 'accessing browser objects from a plugin', and boils down to calling NPN_GetValue with NPNVWindowNPObject as the variable. You get back the window object and then you can get anything you want from there - e.g. call NPN_GetProperty to get the document, then call NPN_Invoke on the document to invoke getElementById.

Только я очень плохо знаком еще с NPAPI и  что то у меня не получается это реализовтаь. Не мог бы кто нибудь написать эти 3 строчки кода, чтобы они правильно работали?

Отредактировано int0 (10-05-2010 13:57:10)

Отсутствует

 

№410-05-2010 16:29:37

Elexander
Участник
 
Группа: Members
Зарегистрирован: 06-10-2008
Сообщений: 54
UA: Opera 10.5

Re: Доступ к DOM из npapi плагина

int0 пишет

Правильно ли я понимаю, что это будет совместимо только с ff ? Например, для Chrome работать не будет?

Нет. Все браузеры за исключением IE поддерживают технологию NPRuntime.

Приблизительный код на Delphi:

Выделить код

Код:

function GetElementByID(id: string): PNPObject;
var
  window: PNPObject;
  vr1, vr2: TNPVariant;
begin
  NPP_GetValue(Instance, NPNV_WINDOW_NPOBJECT, @window);
  NPN_GetProperty(Instance, window, NPN_GetStringIdentifier('document'), @vr1);
  STRINGZ_TO_NPVARIANT(id, vr2);
  NPN_Invoke(GetInstance, vr1.objectValue, NPN_GetStringIdentifier('getElementById'), @vr2, 1, vr1);
  Result := vr1.objectValue;
end;

Только нужно не забыть освободить объект после использования.

Отсутствует

 

№510-05-2010 23:46:05

int0
Участник
 
Группа: Members
Зарегистрирован: 09-05-2010
Сообщений: 3
UA: Firefox 3.6

Re: Доступ к DOM из npapi плагина

Спасибо, тут действительно "приблизительный код" =) но он все равно мне очень помог. Делаю так

Выделить код

Код:

NPVariant vr,vr2;
STRINGZ_TO_NPVARIANT("style",vr);
npnfuncs->invoke(inst,document,npnfuncs->getstringidentifier("getElementsByTagName"),&vr,1,&vr2);

В vr2 теперь поидее содержится массив объектов,но как с ним работаь, например, чтобы узнать размер массива?В js сделал бы так

Выделить код

Код:

var arr = document.getElementsByTagName('style');
var size = arr.length;

Отредактировано int0 (10-05-2010 23:47:00)

Отсутствует

 

№612-05-2010 10:53:58

Elexander
Участник
 
Группа: Members
Зарегистрирован: 06-10-2008
Сообщений: 54
UA: Opera 10.5

Re: Доступ к DOM из npapi плагина

В vr2 теперь поидее содержится массив объектов,но как с ним работаь, например, чтобы узнать размер массива?

Тут все аналогично.
length - свойство объекта-массива (получить можно через NPN_GetProperty)
items(i) - метод с одним параметром (через вызов NPN_Invoke)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]