感謝@TheGunner指引我朝着正確的方向前進。但他沒有指定調整大小的部分。因此,如果嵌入式頁面大於iframe
,則會出現滾動條。爲了防止這種情況,您可以從可嵌入頁面調用window.PostMessage
,並且監聽器將負責調整大小的部分。
我創建了一個腳本,動態id
分配給iframe
,這id
以後用來調整。(我的劇本照顧只有iframe
的高度。如果嵌入頁面響應,寬度不宜一個問題)。
這裏是widget.js
的內容(這包含window.PostMessage
監聽器和代碼來創建iframe
):
(function() {
var func = function(e){
if (e.data.indexOf('iid:') === 0) {
var hashPos = e.data.indexOf('#');
var iid = e.data.substring('iid:'.length, hashPos);
var height = e.data.substring(hashPos + 1) + 'px';
document.getElementById(iid).style.height = height;
}
};
var old = window.onmessage;
if (typeof window.onmessage != 'function') {
window.onmessage = func;
} else {
window.onmessage = function (e, f, g, h) {
if (old) {
old(e, f, g, h);
}
func(e);
};
}
}());
var BuildWidget = function(url, width) {
var getNewIid = function() {
return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
return v.toString(16);
});
};
var iid = getNewIid();
if(!width) {
width = 900;
}
var maxWidth = width + 'px';
document.write('<iframe id="' + iid + '" src="' + url + '?iid=' + iid + '" frameborder="0" scrolling="no" style="min-width: 300px; width:100%; max-width:' + maxWidth + '; display:block;"></iframe>');
};
var AddXWidget = function(width) {
var url = 'http://localhost:8080/embed';
BuildWidget(url, width);
};
現在給出了下面的腳本到第三方網站,使他們能夠嵌入您的小工具:
<script type="text/javascript" src="http://path/to/widget.js">
</script>
<script>
AddXWidget(400);
</script>
現在,可嵌入網頁(內iframe
頁)應該調用window.PostMessage()
如下:
window.top.postMessage('iid:' + iid + '#' + elem.scrollHeight, '*');
這裏iid
是所獲得的URL參數iid
和elem
是元素擡起頭來使用document.getElementById()
的措辭混淆我。你是否控制'iframe'的內容? – Danny
我控制'''iframe'''的內容。但我無法控制放置'''iframe''的頁面。對困惑感到抱歉。我將編輯問題 – sinu
也許你可以做一個小的JavaScript代碼片段,第三方包含一個div或其他容器的id,然後你的javascript可以嵌入它自己的iframe到?有了這個,你可以更好地控制iframe本身。 –