INSERT IGNORE INTO `mytable`
SET `field0` = '2',
`field1` = 12345,
`field2` = 12678;
Здесь запрос mysql, который вставляет записи, если не существует, и будет игнорировать существующие аналогичные записи.
----Untested----
У нас была подобная проблема, но немного обратная вашей ситуации - мы предоставляли 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 на любом домене, кстати...):
<script>
// Resize iframe to full height
function resizeIframe(height)
{
// "+60" is a general rule of thumb to allow for differences in
// IE & and FF height reporting, can be adjusted as required..
document.getElementById('frame_name_here').height = parseInt(height)+60;
}
</script>
<iframe id='frame_name_here' src='http://www.bar.net/framed.html'></iframe>
В www.bar.net/framed.html
:
<body onload="iframeResizePipe()">
<iframe id="helpframe" src='' height='0' width='0' frameborder='0'></iframe>
<script type="text/javascript">
function iframeResizePipe()
{
// What's the page height?
var height = document.body.scrollHeight;
// Going to 'pipe' the data to the parent through the helpframe..
var pipe = document.getElementById('helpframe');
// Cachebuster a precaution here to stop browser caching interfering
pipe.src = 'http://www.foo.com/helper.html?height='+height+'&cacheb='+Math.random();
}
</script>
Содержание www.foo.com/helper.html
:
<html>
<!--
This page is on the same domain as the parent, so can
communicate with it to order the iframe window resizing
to fit the content
-->
<body onload="parentIframeResize()">
<script>
// Tell the parent iframe what height the iframe needs to be
function parentIframeResize()
{
var height = getParam('height');
// This works as our parent's parent is on our domain..
parent.parent.resizeIframe(height);
}
// Helper function, parse param from request string
function getParam( name )
{
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
var regexS = "[\\?&]"+name+"=([^&#]*)";
var regex = new RegExp( regexS );
var results = regex.exec( window.location.href );
if( results == null )
return "";
else
return results[1];
}
</script>
</body>
</html>
Что-то на строках этого я живо должен работать.
parent.document.getElementById(iFrameID).style.height=framedPage.scrollHeight;
Загрузка это с Вашим телом onload на iframe содержании.
Это немного хитро, поскольку необходимо знать, когда iframe страница загрузилась, который является difficuly, когда Вы не контролируете его содержание. Его возможное для добавления onload обработчика к iframe но я попробовал это в прошлом, и это имеет весьма различное поведение через браузеры (не, предполагают, кто является самым раздражающим...). Необходимо было бы, вероятно, добавить функцию к iframe странице, которая выполняет изменение размеры, и введите некоторый сценарий в содержание, которое или слушает события загрузки, или измените размеры событий, который тогда вызывает предыдущую функцию. Я думаю, добавляет функция к странице, так как Вы хотите удостовериться его безопасное, но я понятия не имею, как легкий это должно будет сделать.
гаджеты iGoogle должны активно реализовать изменение размеров, таким образом, мое предположение находится в междоменной модели, Вы не можете сделать этого без удаленного принятия участия содержания в некотором роде. Если Ваше содержание может отправить сообщение с новым размером к контейнерной странице с помощью типичных междоменных коммуникационных методов, то остальное просто.
Решение на http://www.phinesolutions.com/use-jquery-to-adjust-the-iframe-height.html работает отлично (использует jQuery):
<script type=”text/javascript”>
$(document).ready(function() {
var theFrame = $(”#iFrameToAdjust”, parent.document.body);
theFrame.height($(document.body).height() + 30);
});
</script>
я не знаю, что необходимо добавить 30 к длине... 1 работал на меня.
к вашему сведению : Если у Вас уже есть атрибут "высоты" на Вашем iFrame, это просто добавляет стиль = "высота: xxx". Это не могло бы быть тем, что Вы хотите.
Если Вы не должны будете обрабатывать iframe содержание от другого домена, попробуйте этот код, то оно решит проблему полностью, и это просто:
<script language="JavaScript">
<!--
function autoResize(id){
var newheight;
var newwidth;
if(document.getElementById){
newheight=document.getElementById(id).contentWindow.document .body.scrollHeight;
newwidth=document.getElementById(id).contentWindow.document .body.scrollWidth;
}
document.getElementById(id).height= (newheight) + "px";
document.getElementById(id).width= (newwidth) + "px";
}
//-->
</script>
<iframe src="usagelogs/default.aspx" width="100%" height="200px" id="iframe1" marginheight="0" frameborder="0" onLoad="autoResize('iframe1');"></iframe>
Вот простое решение, использующее динамически сгенерированную таблицу стилей, обслуживаемую тем же сервером, что и содержимое iframe. Проще говоря, таблица стилей «знает», что находится в iframe, и знает размеры, которые следует использовать для стилизации iframe. Это обходит те же ограничения политики происхождения.
http://www.8degrees.co.nz/2010/06/09/dynamically-resize-an-iframe-depending-on-its-content/
Таким образом, предоставленный код iframe будет иметь сопутствующий стиль лист вот так ...
Для этого требуется, чтобы логика на стороне сервера могла вычислять размеры отображаемого содержимого iframe.
https://developer.mozilla.org/en/DOM/window.postMessage
window.postMessage ()
window.postMessage - это метод безопасного включения связи между источниками. Обычно скриптам на разных страницах разрешен доступ друг к другу только в том случае, если страницы, которые их выполняли, находятся в местах с одним и тем же протоколом (обычно оба http), номером порта (80 по умолчанию для http) и хостом (по модулю document.domain устанавливается обеими страницами в одно и то же значение). window.postMessage предоставляет управляемый механизм для обхода этого ограничения безопасным способом при правильном использовании.
Сводка
При вызове window.postMessage в целевом окне отправляется событие MessageEvent, когда завершается любой ожидающий выполнения скрипт (например, оставшиеся обработчики событий, если window.postMessage вызывается из обработчика событий, ранее -установить время ожидания ожидания и т. д.). MessageEvent имеет тип message, свойство данных, для которого установлено строковое значение первого аргумента, предоставленного для window.postMessage, свойство origin, соответствующее источнику основного документа в окне, вызывающем window.postMessage во временном окне. postMessage и исходное свойство, которое является окном, из которого вызывается window.postMessage. (Другие стандартные свойства событий представлены с их ожидаемыми значениями.)
Библиотека iFrame-Resizer использует postMessage для сохранения размера iFrame в соответствии с его содержимым, а также MutationObserver для обнаружения изменяет содержимое и не зависит от jQuery.
https: // github.com / davidjbradshaw / iframe-resizer
jQuery: совершенство междоменного сценария
http://benalman.com/projects/jquery-postmessage-plugin/
Имеет демонстрацию изменения размера окна iframe ...
http://benalman.com/code/projects/jquery-postmessage/examples/iframe/
В этой статье показано, как удалить зависимость от jQuery ... Plus содержит много полезной информации и ссылок на другие решения.
http://www.onlineaspect.com/2010/01/15/backwards-compatible-postmessage/
Пример Barebones ...
http://onlineaspect.com/uploads/postmessage/parent. html
Рабочий черновик HTML 5 для window.postMessage
http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages
Джон Ресиг о кросс- Обмен сообщениями в окне