Как объявить друга блок?

У нас была подобная проблема, но немного обратная вашей ситуации - мы предоставляли iframed-контент сайтам на других доменах, поэтому политика одинакового происхождения также была проблемой. После многих часов, проведенных в google, мы в конце концов нашли (немного...) работоспособное решение, которое вы, возможно, сможете адаптировать к своим потребностям.

Есть способ обойти политику одинакового происхождения, но он требует изменений как в содержимом iframed, так и на странице фрейминга, так что если у вас нет возможности запросить изменения с обеих сторон, боюсь, этот метод будет для вас не очень полезен.

Существует причуда браузера, которая позволяет нам обойти политику одинакового происхождения - javascript может общаться либо со страницами на своем собственном домене, либо со страницами, которые он подставил, но никогда со страницами, в которых он подставлен, например, если у вас есть:

 www.foo.com/home.html, which iframes
 |-> www.bar.net/framed.html, which iframes
     |-> www.foo.com/helper.html

то home.html может общаться с framed.html (подставлен) и helper.html (тот же домен).

 Communication options for each page:
 +-------------------------+-----------+-------------+-------------+
 |                         | home.html | framed.html | helper.html |
 +-------------------------+-----------+-------------+-------------+
 | www.foo.com/home.html   |    N/A    |     YES     |     YES     |
 | www.bar.net/framed.html |    NO     |     N/A     |     YES     |
 | www.foo.com/helper.html |    YES    |     YES     |     N/A     |
 +-------------------------+-----------+-------------+-------------+

framed.html может отправлять сообщения на helper.html (iframed), но не home.html (ребенок не может общаться с родителем через домены).

Ключевым здесь является то, что helper.html может получать сообщения от framed.html, и может также общаться с home.html.

То есть, по сути, когда framed.html загружается, он определяет свою собственную высоту, сообщает helper.html, который передает сообщение home.html, который затем может изменить размер iframe, в котором находится framed.html.

Самый простой способ передачи сообщений от framed.html к helper.html - через аргумент URL. Для этого в framed.html есть iframe с указанием src='''. Когда срабатывает его onload, он оценивает свою собственную высоту и устанавливает src iframe в этот момент в helper.html?height=N

Здесь есть объяснение того, как facebook обрабатывает это, которое может быть немного понятнее, чем мое выше!


Код

В www.foo.com/home.html требуется следующий код javascript (его можно загрузить из файла .js на любом домене, кстати...):



В www.bar.net/framed.html:





Содержание www.foo.com/helper.html:

 
 
   
     
   

110
задан Hemant 14 July 2009 в 07:39
поделиться

2 ответа

Вам необходимо подписать обе сборки, потому что по сути обе сборки ссылаются друг на друга.

Вы должны сделать общедоступным ключ в атрибуте InternalsVisibleTo. Например, в буферах протокола я использую:

[assembly:InternalsVisibleTo("Google.ProtocolBuffers.Test,PublicKey="+
"00240000048000009400000006020000002400005253413100040000010001008179f2dd31a648"+
"2a2359dbe33e53701167a888e7c369a9ae3210b64f93861d8a7d286447e58bc167e3d99483beda"+
"72f738140072bb69990bc4f98a21365de2c105e848974a3d210e938b0a56103c0662901efd6b78"+
"0ee6dbe977923d46a8fda18fb25c65dd73b149a5cd9f3100668b56649932dadd8cf5be52eb1dce"+
"ad5cedbf")]

Открытый ключ можно получить, запустив

sn -Tp path\to\test\assembly.dll

. Также можно получить его из файла .snk:

sn -p MyStrongnameKey.snk public.pk
sn -tp public.pk
189
ответ дан 24 November 2019 в 03:15
поделиться

Я думаю, вам нужно ввести строгое имя, которое будет примерно таким: «Company.Product.Tests, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = 17135d9fcba0119f». Я предполагаю, что Company.Product.Tests - это ваше имя сборки, а 17135d9fcba0119f - открытый ключ.

Другой способ решить эту проблему - не использовать отдельные сборки. Обычно я помещаю исходный код и код тестирования в одну сборку. Я не знаю, есть ли у вас особые опасения, что вы должны их разделить.

-7
ответ дан 24 November 2019 в 03:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: