Есть ли способ обработки глубоких ссылок в Silverlight без показа '#' в URL? - PullRequest
3 голосов
/ 05 января 2010

Я хочу иметь два отдельных интерфейса для моего веб-сайта, один из которых является silverlight, а другой - обычный html для людей, у которых нет Silverlight, и для поисковых систем. У них будет точно такой же контент, а у Silverlight - просто более богатый.

Если кто-то с Silverlight скопирует URL-адрес на определенную страницу, в нем будет знак «#» (app # page1). Если они затем захотят сделать ссылку на эту страницу в своем блоге или что-то в этом роде, там будет #, и поисковая система, вероятно, не будет рассматривать ее как отдельную страницу из приложения # page2.

Есть ли способ заставить навигацию из Silverlight обновлять URL-адрес с помощью символа '/' вместо '#', фактически не загружая отдельную страницу? Таким образом, URL-адреса в адресной строке выглядят как URL-адреса обычных веб-сайтов («app / page1», «app / page2»).

Ответы [ 2 ]

5 голосов
/ 05 января 2010

Есть ли способ заставить навигацию из Silverlight обновить URL-адрес с помощью символа '/' вместо '#', фактически не загружая отдельную страницу? Таким образом, URL-адреса в адресной строке выглядят как URL-адреса обычных веб-сайтов («app / page1», «app / page2»).

К сожалению, нет. Причина, по которой в навигационных URL-адресах Silverlight используется #, заключается в том, что вы можете перемещаться по в пределах страницы, перемещаясь в место привязки. Если вы используете полный URL с разделителями '/', это приведет к тому, что браузер перейдет на новую страницу, которая перезагрузит ваше приложение Silverlight. Это в основном разгрузит ваше приложение Silverlight и загрузит новое с новым URL.

1 голос
/ 05 января 2010

Причина, по которой они используют знак #, заключается в том, что браузер интерпретирует это как перемещение в какое-либо место на странице, в противном случае это приведет к перезагрузке страницы.

Что касается последствий для поисковых систем, я не уверен, что так или иначе. Может быть, кто-то более опытный с SEO может вмешаться в это.

Тем не менее, я уверен, что вы можете получить то поведение, которое вам нужно, просто может быть немного хитро с вашей стороны. Другой способ передачи информации в среду выполнения клиента Silverlight - использование параметров Query String. Вы можете получить доступ к параметрам строки запроса, используя коллекцию System.Windows.Browser.HtmlPage.Document.QueryString, затем вы можете загрузить элемент управления Page или User нужным вам содержимым на основе этого параметра.

Что касается имитации структуры папок с помощью '/'. Я знаю, что есть способы сделать это, используя пользовательские настройки веб-сервера / HTTPModules. Я предполагаю, что вы используете IIS / ASP.Net, я бы посмотрел на это из Гатри:

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

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

...