Можно ли создавать собственные элементы XUL из XPCOM или NPAPI?

Мне было интересно, можно ли создать новый компонент XUL через любой доступный api, такой как XPCOM или NPAPI, чтобы мы могли использовать его в наших файлах XUL.

Допустим, я хотел клонировать код компонентов XULs vbox и добавить в него несколько модификаций, чтобы мы могли использовать наш собственный компонент XUL вот так:

<window>
    <myvbox mycustomarg1="customValue"> Some content... </myvbox>
</window>

Я знаю, что такое XBL и для чего он используется, но он нам не подходит.

Любое предложение о том, как этого добиться?

Изменить:

Нам нужно создать компонент браузера в Firefox как дочерний элемент другого объекта браузера. Проблема в том, что некоторые веб-сайты определяют этот дочерний браузер как iframe, и мы хотим этого избежать.

Спасибо.


person santiageitorx    schedule 30.06.2011    source источник
comment
Непонятно, что вы имеете в виду, говоря о создании нового XUL-компонента - вы имеете в виду определение нового XUL-тега с настраиваемым поведением? То же самое, что и XBL, но динамически? Не могли бы вы уточнить, почему именно XBL вам не подходит? Обратите внимание, что расширение <vbox> или других элементов XUL - это именно то, для чего используется XBL.   -  person Wladimir Palant    schedule 30.06.2011
comment
Например, мы хотим иметь возможность работать с xul-компонентом ‹browser›, который на самом деле не сообщает о себе как о iframe для веб-сайтов, чтобы эти скрипты для разбиения iframe не мешали просмотру определенных веб-сайтов, таких как hotmail.com или facebook.   -  person santiageitorx    schedule 30.06.2011
comment
Вот почему нам нужны пользовательские компоненты xul, а XBL - это не выбор.   -  person santiageitorx    schedule 30.06.2011
comment
Для этого type="content" (developer.mozilla.org/en/XUL/Attribute/ browser.type). Но это, конечно, не будет (не может) работать, если ваш XUL-документ уже находится в области содержимого браузера, а не открывается, например, в отдельном окне.   -  person Wladimir Palant    schedule 30.06.2011
comment
Вам следует серьезно подумать о том, чтобы спросить нас о вашей реальной проблеме, а не о том, как реализовать уже разработанное вами решение. Потому что есть веские основания полагать, что это решение изначально неверно. Если вы объясните проблему, мы сможем предложить лучшее решение.   -  person Wladimir Palant    schedule 30.06.2011
comment
Хорошо, настоящая проблема в том, что нам нужно создать компоненты ‹browser› в уже созданном объекте ‹browser›. Но мы не можем сделать это для просмотра нескольких типов веб-сайтов из-за их кодов взлома iframe. Мы не хотим пытаться изменять код загруженных веб-сайтов, поскольку это не было бы хорошим решением и не сработало бы для каждого просматриваемого сайта. Мы хотели бы знать, есть ли способ добиться этого, независимо от того, какая технология используется, и как достичь этой цели. Может быть, есть способ изолировать этот новый браузер, чтобы он не видел родительский браузер?   -  person santiageitorx    schedule 30.06.2011
comment
Это проблема только в том случае, если в родительском браузере есть type="content". Если в родительском браузере есть type="chrome", а в дочернем - type="content", все должно работать так, как вы этого хотите. Обратите внимание, что тип браузера не может быть изменен задним числом, он должен быть установлен до того, как элемент будет вставлен в документ.   -  person Wladimir Palant    schedule 30.06.2011
comment
Владимир, большое спасибо за помощь. С вашим предложением я понял, что нет необходимости использовать XPCOM, NPAPI или какие-либо другие технологии, которые нужно было бы компилировать. Пожалуйста, опубликуйте этот комментарий как ответ, чтобы я мог отметить его как решение.   -  person santiageitorx    schedule 30.06.2011


Ответы (1)


Если точка не позволяет веб-странице, загруженной во фрейм, вмешиваться в ваш XUL-документ, вы должны использовать <browser type="content"> - это устанавливает границу безопасности между хромом и контентом, которая (среди прочего) предотвращает доступ документа контента к его родительскому фрейму. Однако важно, чтобы сам ваш XUL-документ загружался как хром, а не как содержимое (находясь либо на верхнем уровне, либо внутри <browser type="chrome">). См. https://developer.mozilla.org/en/XUL/Attribute/browser.type для документации.

person Wladimir Palant    schedule 30.06.2011