Sie sollten kein Problem haben, wenn Sie den Text der Warnung kennen und nichts dagegen haben, schmutzig zu werden.
können Sie überschreiben die Benachrichtigung des iframe Fenster mit Ihrem eigenen und etwas tun, um die Wirkung von ..
document.getElementById("InnerFrameName").contentWindow.alert = function(){
if (arguments[0].toLowerCase() == "innerframe alert text")
return; //supress
else
alert(arguments[0]);
};
Edit: Ich habe einen kleinen Test mit einem Proxy-Handler (es ist in asp.net/c# aber Sie sollten die Idee bekommen) ...
Die externe Seite in meinem Test ist eine w3-Seite mit einer Schaltfläche, die eine Warnung anzeigt, die Warnung wird nun durch die benutzerdefinierte Funktion übergeben.
Ich bin sicher, das ist viel dreckiger, als Sie gerne bekommen würden.
Seite:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Hello From MyPage</title>
<script type="text/javascript">
function frameLoaded() {
document.getElementById("InnerFrameName").contentWindow.alert = function() {
if (arguments[0].toLowerCase() == "i am an alert box!!") {
alert("MESSAGES WOULD BE SUPRESSED: " + arguments[0]);
return; //supress
} else {
alert(arguments[0]);
}
};
}
</script>
</head>
<body onload="alert('Hello from an unsupressed top level frame message!');">
<form id="form1" runat="server">
<div>
<h1>Internal Page (Top Level)</h1>
<hr />
<iframe id="InnerFrameName" onload="frameLoaded();" src="PageProxy.ashx?externalURI=http://www.w3schools.com/JS/tryit_view.asp?filename=tryjs_alert"
style="width: 800px; height: 600px;">Derp!...</iframe>
</div>
</form>
</body>
</html>
Proxy Handler:
<%@ WebHandler Language="C#" Class="PageProxy" %>
using System;
using System.Web;
public class PageProxy : IHttpHandler {
public void ProcessRequest (HttpContext context) {
byte[] externalPage = new System.Net.WebClient().DownloadData(context.Request["externalURI"]);
context.Response.OutputStream.Write(externalPage, 0, externalPage.Length);
context.Response.End();
}
public bool IsReusable {
get {
return false;
}
}
}
Bestätigte meinen Verdacht. Ich werde etwas zusätzlich zu oder anstelle von JavaScript für dieses verwenden müssen. – moffdub
JavaScript-Thread wird nicht angehalten, die Nachrichten werden immer noch gepumpt und alle Timer oder asynchronen Änderungen werden weiterhin Event-Handler auslösen, und JS in diesen Handlern wird weiterhin ausgeführt. –