У нас была такая проблема, но немного в обратном направлении к вашей ситуации - мы предоставляли iframed-контент сайтам в других доменах, поэтому также была проблема той же политики происхождения . После многих часов траулинга google мы в конечном итоге нашли (несколько ..) работоспособное решение, которое вы, возможно, сможете адаптировать к вашим потребностям.
Существует способ, связанный с одной и той же политикой происхождения, но для этого требуется изменения как на iframed-содержимом, так и на странице кадрирования, поэтому, если у вас нет возможности запрашивать изменения с обеих сторон, этот метод не будет очень полезен для вас, я боюсь.
браузерная quirk, которая позволяет нам обходить одну и ту же политику происхождения - javascript может связываться либо со страницами в своем собственном домене, либо со страницами, на которых он имеет iframed, но никогда не страницы, в которых он создан, например если у вас есть:
www.foo.com/home.html, which iframes
|-> www.bar.net/framed.html, which iframes
|-> www.foo.com/helper.html
, тогда home.html
может связываться с framed.html
(iframed) и 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), но not 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
:
Я предполагаю, что вы копируете Пример на странице Xamarin. Ошибки, с которыми вы сталкиваетесь, заключаются в том, что вы не создаете ViewCell для TableView.
Вот рабочий пример, с которого стоит начать.
var table = new TableView();
table.Intent = TableIntent.Settings;
var layout = new StackLayout() { Orientation = StackOrientation.Horizontal };
layout.Children.Add (new Label() {
Text = "TestLayout",
TextColor = Color.FromHex("#f35e20"),
VerticalOptions = LayoutOptions.Center
});
table.Root = new TableRoot () {
new TableSection("Getting Started") {
new ViewCell() {View = layout}
}
};
Content = table;