누군가 나를 도울 수 있는지 궁금합니다. 파워 bi의 타일을 i- 프레임에 삽입하려고합니다. 나는 많은 접근 방식을 시도했지만 아무것도 얻지 못하거나 로딩 표시가 멈추지 않는 것 같습니다. 아래 코드는 아무것도 보이지 않습니다. 또한 자바 스크립트를 사용하지 않고이 작업을 수행하는 방법이 있습니까?
<script type="text/javascript">
var width = 800;
var height = 600;
var embedTileUrl = @Model.Tile.embedUrl;
var accessToken = @Model.AccessToken;
window.onload = function () {
updateEmbedTile();
};
function updateEmbedTile() {
if ("" === embedTileUrl)
return;
iframe = document.getElementById('iFrameEmbedTile');
iframe.src = embedTileUrl + "&width=" + width + "&height=" + height;
iframe.onload = postActionLoadTile;
}
function postActionLoadTile() {
if ("" === accessToken)
return;
var h = height;
var w = width;
var m = { action: "loadTile", accessToken: accessToken, height: h, width: w };
message = JSON.stringify(m);
iframe = document.getElementById('iFrameEmbedTile');
iframe.contentWindow.postMessage(message, "*");
}
</script>
<iframe id="iFrameEmbedTile" src="" height="500px" width="500px" frameborder="0" seamless></iframe>
이러한 변경 사항은 결국 빠른 수정으로 수정되었지만 더 자세히 조사하고 Javascript를 사용하지 않는 더 나은 솔루션을 찾을 계획입니다.
첫 번째 문제를 수정했습니다.
var accessTokenElement = "@Model.AccessToken";
두 번째 문제를 수정했습니다.
<input type="text" id="tb_EmbedURL" value="@Model.Tile.embedUrl" hidden />
<input type="button" id="bEmbedTileAction" value="Embed Tile" hidden />
<iframe id="iFrameEmbedTile" src="" height="450" width="450" frameborder="0" align="middle" seamless></iframe>
이것은 자동으로로드됩니다. 아래는 전체 코드입니다.
<script type="text/javascript">
window.onload = function () {
var el = document.getElementById("bEmbedTileAction");
if (el.addEventListener) {
el.addEventListener("click", updateEmbedTile, false);
} else {
el.attachEvent('onclick', updateEmbedTile);
}
if (window.addEventListener) {
window.addEventListener("message", receiveMessage, false);
} else {
window.attachEvent("onmessage", receiveMessage);
}
var accessTokenElement = "@Model.AccessToken";
if (null !== accessTokenElement) {
var accessToken = accessTokenElement.value;
if ("" !== accessToken)
updateEmbedTile();
}
};
var width = 450;
var height = 450;
function receiveMessage(event) {
if (event.data) {
try {
messageData = JSON.parse(event.data);
if (messageData.event === "tileClicked") {
//Get IFrame source and construct dashboard url
iFrameSrc = document.getElementById(event.srcElement.iframe.id).src;
//Split IFrame source to get dashboard id
var dashboardId = iFrameSrc.split("dashboardId=")[1].split("&")[0];
urlVal = iFrameSrc.split("/embed")[0] + "/dashboards/{0}";
urlVal = urlVal.replace("{0}", dashboardId);
window.open(urlVal);
}
}
catch (e) {
// In a production app, handle exception
}
}
}
function updateEmbedTile() {
// check if the embed url was selected
var embedTileUrl = document.getElementById('tb_EmbedURL').value;
if ("" === embedTileUrl)
return;
iframe = document.getElementById('iFrameEmbedTile');
iframe.src = embedTileUrl + "&width=" + width + "&height=" + height;
iframe.onload = postActionLoadTile;
}
function postActionLoadTile() {
accessToken = "@Model.AccessToken";
if ("" === accessToken)
return;
var h = height;
var w = width;
var m = { action: "loadTile", accessToken: accessToken, height: h, width: w };
message = JSON.stringify(m);
iframe = document.getElementById('iFrameEmbedTile');
iframe.contentWindow.postMessage(message, "*");;
}
</script>
<input type="text" id="tb_EmbedURL" value="@Model.Tile.embedUrl" hidden />
<input type="button" id="bEmbedTileAction" value="Embed Tile" hidden />
<iframe id="iFrameEmbedTile" src="" height="450" width="450" frameborder="0" align="middle" seamless></iframe>
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다