2012-02-27 1 views
0

Я разработал плагин NPAPI для сценариев. Когда я пытаюсь загрузить один экземпляр в Chrome/Firefox, у меня нет проблем с обращением к веб-странице (веб-странице A) и ее javascript. Но как только я открою новую страницу (веб-страницу B) с внедренным плагином, она хочет передать веб-страницу A, а не веб-страницу B. Как я могу различать эти две?NPAPI несколько конфликтов экземпляров

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

Thanks

ответ

1

Точки входа не повлияют на то, о чем вы говорите; скорее всего, вы не правильно отслеживаете экземпляры NPP или у вас есть что-то еще глобальное, чего не должно быть.

Основные точки входа не являются специфичными для экземпляра; если вы посмотрите на функции NPP_ *, все те, которые относятся к экземпляру, принимают «АЭС» в качестве первого параметра; как правило, вы будете держать указатель на какую-то структуру данных в поле pdata АЭС, и это то, что вы должны использовать, чтобы различать разные экземпляры. Если вы делаете это неправильно или если где-то еще вы храните глобальную или статическую переменную, которая должна быть специфичной для экземпляра, это может привести к проблеме, которую вы описываете.

Возможно, вы захотите рассмотреть возможность использования FireBreath или Nixysa; первый абстрагирует большую часть боли NPAPI и дает вам поддержку IE, а второй может сгенерировать скелет w/API для вас, чтобы вы заполнили другой код, и вы начинаете с того, что уже работает.

Дополнительная информация о том, как работает структура АЭС и как различия между разными экземплярами можно найти на http://npapi.com/tutorial2

+1

я хранить указатель на экземпляр АЭС, когда NPP_New вызывается в глобальной структуре. Так что, когда я делаю вызовы функции NPN_, у меня будет указатель. – hapyfishrmn

+0

хорошо, это право есть ваша проблема. У вас есть это в обратном направлении; вы не храните АЭС в любом месте, потому что это идентификатор экземпляра. В любом месте, где вам нужно вызвать функцию NPN_, должно быть что-то конкретное для экземпляра; Обычно я создаю класс и сохраняю указатель на него в АЭС, чтобы потом использовать его и хранить npp внутри этого класса. Убедитесь, что вы освободили класс в NPP_Destroy – taxilian

+0

Я понимаю, что когда вы вызываете NPP_, вы можете посмотреть на экземпляр -> pdata. Когда у вас есть скриптовый объект (класс NPObject), я не вижу, как у вас есть указатель на экземпляр. Javascript вызывает Invoke(), и вы вызываете функции, которые используют NPN_, откуда вы получаете АЭС? – hapyfishrmn