У меня есть асинхронный подключаемый обработчик протокола для приложения, которое в основном имитирует протокол file: //, но ограничивает запросы песочницей, настроенной в приложении.
Приложение размещает веб-приложение AngularJS, используя элемент управления WebBrowser в C #. Когда маршрутизатор Angular запрашивает файл шаблона представления, используя протокол, я получаю запрос к моей реализации IInternetProtocolInfo :: CombineUrl () со следующими baseUrl иlativeUrl:
pwzBaseUrl: myProtocol:///webApp/app/index.html#/start
pwzRelativeUrl: views/start.html
для которого мой код:
wchar_t buf[2048] = { 0 };
DWORD ret = 2048;
UrlCombine(pwzBaseUrl, pwzRelativeUrl, buf, &ret, 0);
// pwzResult is myProtocol:///webApp/app/views/start.html here
StringCchCopy(pwzResult, ret + 1, buf);
*pcchResult = ret + 1;
return S_OK;
Это приводит к вызову IInternetProtocol :: Start () со следующим URL:
szUrl: myProtocol:///webApp/app/views/start.html/webApp/app/views/start.html
Как мы видим, путь к файлу дублирован, и я не знаю почему. Похоже, что только файлы шаблонов просмотра для AngularJS страдают от этой проблемы; другие относительные пути работают абсолютно нормально (например, извлечение других файлов скриптов из bower_components / node_modules).
Я хотел бы избежать взломать это, чтобы разделить путь пополам, если это дубликат. Должна быть причина, почему urlmon вызывает мой протокол с этим странным URL …
Задача ещё не решена.
Других решений пока нет …