HTML может содержать маленькие кусочки встроенного в него JavaScript (например, определенные в onclick
обработчиках событий).
Если бы я писал браузер Html с использованием языка dotNet, такого как C #, какие технологии или API я мог бы использовать для запуска таких фрагментов Javascript, учитывая, что я не получаю его до времени выполнения (и получаю его как строковые данные, а не исполняемый код)?
Легче или сложнее, если выполняемый код был фрагментом кода C #, а не Javascript?
Есть ли какая-либо техника, которая не требует, чтобы мой код имел необычные привилегии? Например, такой метод, как CodeCompiler.FromSource
, требует SecurityPermissionFlag.UnmanagedCode
(что мне кажется чрезмерным: я не понимаю, почему компилировать код так рискованно).
Если бы я контролировал как серверный, так и клиентский код, я мог бы также рассмотреть возможность компиляции таких фрагментов скриптов на сервере, а не на клиенте, а затем отправлять их в виде предварительно скомпилированного кода на стороне клиента. быть выполненным. Есть ли способ отправить такой код (сборка dotNet, предположительно) по сети клиенту, сделать так, чтобы код на стороне клиента получал его из сети в ОЗУ на стороне клиента и вызывал его на стороне клиента без сохранить его в виде файла на клиентском диске?
Редактировать
У меня есть ответ на первые три вопроса: я смирился с тем фактом, что компиляция требует высоких привилегий. Я не понимаю почему; возможно (хотя я не нахожу это очень убедительной причиной) это потому, что компилятор реализован с использованием неуправляемого кода. Возможно, это изменится, когда они переопределят компилятор, используя управляемый код, возможно на таймфрейме "C # version 5". В любом случае, какой бы ни была причина, похоже, что так оно и есть, и никаких обходных путей нет (другие подобные API, но требующие меньшего количества привилегий).
Мой оставшийся вопрос заключается в том, как получить экземпляр Assembly с одного компьютера на другой. Когда у меня будет время, я узнаю, может ли ненадежный код выполнить метод Assembly.Load(byte[] rawAssembly)
.