Как мне получить доступ к файлу Silverlight XAP через домен?
-
20-08-2019 - |
Вопрос
Я пытаюсь добавить свое приложение Silverlight, которое находится на одном поддомене, на веб-страницу в другом поддомене.По какой - то причине это просто не работает ...мое приложение Silverlight загружается как таковое на странице http://subA.domain.com/somepage.html:
<div id="silverlightControlHost">
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2"
width="800px" height="600px">
<param name="source" value="http://subB.domain.com/SilverlightApp.xap" />
<param name="onerror" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="2.0.31005.0" />
<param name="autoUpgrade" value="true" />
<param name="enableHtmlAccess" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">
<img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight"
style="border-style: none" />
</a>
</object>
<iframe style='visibility: hidden; height: 0; width: 0; border: 0px'></iframe>
</div>
Если я перемещу SilverlightApp.xap в subA.domain.com, он загрузится идеально.Какие шаги необходимы для доступа к файлу XAP из разных доменов??Я рылся в сети, пытаясь разобраться в этом, и, похоже, ни к чему не пришел.
Спасибо!!
Решение
Когда Silverlight запрашивает междоменный файл .XAP, тип содержимого должен быть: приложение/x-silverlight-приложение.Кроме того, вам нужен файл междоменной политики на другом домене.gl
Другие советы
Чтобы помочь другим, у кого есть такая же проблема, и которые не хотят использовать IFrames, пожалуйста, ознакомьтесь с этим Ссылка, поскольку это решило мою проблему.Несмотря на то, что автор ссылается на Silverlight 2, он решил мою проблему в Silverlight 3.На случай, если ссылка оборвется, есть 2 вещи, которые мне нужно было сделать:
-- В приложении Silverlight отредактируйте AppManifest.xml, чтобы добавить следующее:
<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
ExternalCallersFromCrossDomain="ScriptableOnly">
-- Если вы используете HtmlPage в своем приложении Silverlight (например, при чтении строки запроса, переданной на страницу хостинга), вы также должны добавить:
<param name="enableHtmlAccess" value="true" />
к объекту silverlight на странице хостинга.
Пожалуйста, обратите внимание, что вышесказанное имеет последствия для безопасности, и я не могу не думать, что именно поэтому Microsoft не прилагает всех усилий для распространения этой информации.Однако в моем случае у меня нет скриптовых элементов silverlight, и поскольку я написал приложение silverlight, у меня нет проблем со страницей хостинга, разрешающей приложению silverlight доступ к ней.
Исследуя это, я заметил, что эта проблема и соответствующие решения путаются с отдельной проблемой, проблемой доступа silverlight xap к службе wcf через границы домена.Для решения этой проблемы требуется файл clientaccesspolicy.xml, расположенный в корневом каталоге веб-сайта, на котором размещена служба wcf.
Таким образом, возможно, чтобы 1-й сайт получал доступ к файлу xap на 2-м сайте, который получает доступ к службе передачи данных на 3-м сайте, для максимальной гибкости и повторного использования.
Вы могли бы создать простой html-файл рядом с .xap, содержащий объект silverlight, и получить к нему доступ из iframe.Вот как http://silverlight.live.com/ исправлена эта проблема, например.
На вашей главной странице на subA.domain.com добавьте iframe, который показывает html-страницу в другом домене:
<iframe src="http://subB.domain.com/SilverlightApp.html"
scrolling="no"
frameborder="0"
style="width:800px;height:600px">
</iframe>
и SilverlightApp.html на subBdomain.com могло бы выглядеть примерно так:
<html>
<body>
<div id="silverlightControlHost">
<object data="data:application/x-silverlight-2,"
type="application/x-silverlight-2"
width="800px" height="600px">
<param name="source" value="http://subB.domain.com/SilverlightApp.xap" />
<param name="onerror" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="2.0.31005.0" />
<param name="autoUpgrade" value="true" />
<param name="enableHtmlAccess" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=124807"
style="text-decoration: none;">
<img src="http://go.microsoft.com/fwlink/?LinkId=108181"
alt="Get Microsoft Silverlight"
style="border-style: none" />
</a>
</object>
<iframe style='visibility: hidden; height: 0; width: 0; border: 0px'>
</iframe>
</div>
</body>
</html>