Страницы: 1
Здравствуйте. Подскажите пожалуйста, как можно обращаться к DOM модели html страницы в 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)
Отсутствует
Правильно ли я понимаю, что это будет совместимо только с 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;
Только нужно не забыть освободить объект после использования.
Отсутствует
Спасибо, тут действительно "приблизительный код" но он все равно мне очень помог. Делаю так
NPVariant vr,vr2; STRINGZ_TO_NPVARIANT("style",vr); npnfuncs->invoke(inst,document,npnfuncs->getstringidentifier("getElementsByTagName"),&vr,1,&vr2);
В vr2 теперь поидее содержится массив объектов,но как с ним работаь, например, чтобы узнать размер массива?В js сделал бы так
Отредактировано int0 (10-05-2010 23:47:00)
Отсутствует
В vr2 теперь поидее содержится массив объектов,но как с ним работаь, например, чтобы узнать размер массива?
Тут все аналогично.
length - свойство объекта-массива (получить можно через NPN_GetProperty)
items(i) - метод с одним параметром (через вызов NPN_Invoke)
Отсутствует
Страницы: 1