Я создал объект Browser Helper для IE8, чтобы запустить javascript, расположенный на моем компьютере. Как расширения браузера работают в других браузерах. Я пытаюсь выполнить следующий код:
IHTMLWindow2* pWindow;
doc->get_parentWindow(&pWindow);
hr = pWindow->execScript((BSTR)"var d=window.document,\
s=d.createElement('script'),\
h=d.getElementsByTagName('body')[0];\
s.src='file:///L:/prg/Web/ieplugin/ieplugin.js';\
h.appendChild(s);",
(BSTR)"JavaScript", &vResult);
Но результатом является E_INVALIDARG, который, скорее всего, вызван адресом скрипта. Можно ли запустить скрипт с моего компьютера, не понижая настройки безопасности для интернет-зоны? Я попытался установить минимальные настройки безопасности для надежных сайтов и добавил в доверенные сайты файл: // localserver, но безрезультатно.
РЕДАКТИРОВАТЬ: Более конкретно, я получаю следующее сообщение об ошибке в окне IE:
Message: Invalid character
Line: 1
Char: 1
Code: 0
URI: file:///L:/prg/Web/ieplugin/ieplugin.js
Internet Explorer не позволяет использовать URI-адреса протокола file: // на страницах, отличных от File: //. Это изменение было сделано еще в 2011 году и применяется только к сайтам ИНТЕРНЕТ и ОГРАНИЧЕННОЙ ЗОНЫ.
Увидеть http://blogs.msdn.com/b/ieinternals/archive/2011/08/12/internet-explorer-9.0.2-update-changes-file-protocol-and-cookie-naming.aspx для деталей.
Чтобы обойти это, вместо этого сделайте, чтобы ваше расширение загружало содержимое целевого сценария в BSTR и использовало это BSTR для передачи в execScript.
Других решений пока нет …