Изолированное выполнение Javascript в расширении Internet Explorer (BHO)

В Firefox есть Песочница и evalInSandbox(). Chrome имеет изолированное выполнение в своих сценариях контента (они называют это изолированным выполнением). Я ищу то же самое в расширении браузера IE.

Я могу загрузить файл javascript, а затем вызвать evalScript(), но код выполняется в той же среде, что и javascript, существующий на странице. Мне нужен способ запустить мою библиотеку (которая включает и основана на jQuery) в изолированной/изолированной среде, но при этом позволить ей изменять DOM, как если бы она работала на странице.

Jint выглядит многообещающе, но пока не может оценить jQuery. (Они могут разобрать его.)

Как я могу это сделать?


person TelegramSam    schedule 08.01.2010    source источник
comment
Изолированный мир Chrome: code.google.com/chrome/extensions/ Сценарии содержимого выполняются в специальной среде, называемой изолированным миром. У них есть доступ к DOM страницы, в которую они внедряются, но не к каким-либо переменным или функциям JavaScript, созданным страницей.   -  person TelegramSam    schedule 11.01.2010
comment
evalInSandbox в Firefox: developer.mozilla.org/En/Components.utils.evalInSandbox Этот метод используется GreaseMonkey, чтобы разрешить выполнение javascript вне контекста страницы. Передача DOM в качестве переменной позволяет сценарию изменять DOM, не разрешая доступ javascript страницы к своим собственным методам и переменным. Это позволяет изолированному коду устанавливать теги сценариев и загружать контент на главной странице, но предотвращение этого не является моей задачей.   -  person TelegramSam    schedule 11.01.2010
comment
Я не уверен, что evalInSandbox действительно работает так, как вы думаете; см. пример кода в разделе «Безопасность». Хотя я не эксперт, я понимаю, что evalInSandbox в первую очередь полезен для того, чтобы позволить JS, который в противном случае выполнялся бы в зоне полного доверия Chrome, вместо этого выполнялся в зоне ограниченного доверия активного документа.   -  person EricLaw    schedule 12.01.2010
comment
Думаю, все просто боятся сказать вам, что не знают ответа на ваш вопрос. Это не ответы. У меня тоже нет, но я просто говорю   -  person Alex    schedule 10.12.2010


Ответы (4)


Похоже, вы в рассол с этим.

  • Некоторые люди Microsoft говорят, что IE не предлагает эту функциональность.
  • Некоторые, кто говорят, что им это удалось, держат это близко и защищают как свой секретный соус.
  • «Профессиональные» магазины расширений IE, когда к ним обращаются по поводу создания того, о чем вы говорите, отказываются от работы.

Я бы очень хотел, чтобы у меня были новости получше, но похоже, что для достижения того, что вы ищете, может потребоваться маленькое чудо... или, может быть, много денег. :)

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

person Mike Grace    schedule 09.12.2010


Вам нужен движок ActiveScript (http://en.wikipedia.org/wiki/Active_Scripting)

Сейчас не могу найти полезных ссылок, MSDN содержит только определение интерфейсов (http://msdn.microsoft.com/en-us/library/ccd0zt2w(v=vs.85).aspx) Попробуйте поискать в Google "Active Scripting" (не "Action scripting"!)

Вам нужно реализовать интерфейс IActiveScriptHost в вашем расширении, создать объект «JScript», вызвать SetSite и передать ваш хост-объект, затем вы можете загрузить свой js-код в этот движок и запустить его.

Этот метод довольно сложен из-за отсутствия документации о нем. Если вы все еще заинтересованы в этом, я могу отправить вам несколько примеров на C++/ATL.

person Burivuh    schedule 16.02.2011
comment
Если бы вы могли разместить пример кода здесь и, возможно, в GitHub, это было бы очень полезно. Тем более, что, как вы сказали, документации мало. - person Benjamin Gruenbaum; 29.11.2013

Не могли бы вы немного подробнее рассказать о своих целях?

Я не думаю, что вы четко определили, чего вы пытаетесь достичь. Если ваш код имеет возможность изменять DOM страницы, то он эффективно выполняется в контексте страницы. Он может создавать новые блоки сценариев для выполнения любых небезопасных или ненадежных действий, которые он мог бы выполнить, если бы работал в той же среде выполнения.

IE не предлагает возможности делать то, что вы просите, и я не уверен, что функции Firefox и Chrome работают так, как вы ожидаете.

person EricLaw    schedule 08.01.2010
comment
Мои цели включают запуск javascript на странице, при этом javascript страницы не может получить доступ к моим методам и переменным javascript. Я также хочу новую копию javascript. Если на странице переопределен метод в javascript, я не хочу подвергаться их переопределению. Меня не беспокоит способность моего сценария вставлять теги сценария в DOM, чтобы выпрыгнуть из песочницы. То, что я описал, доступно в Firefox и Chrome. Я опубликую ссылки на соответствующую документацию. - person TelegramSam; 11.01.2010