문제

소스 페이지가 별도의 도메인에있는 iframe이있는 페이지가 있습니다. 때때로 소스 페이지는 경고를 생성합니다. 그렇게하면 사용자가 알림을 클릭 할 때까지 수행하는 작업을 중지합니다.

내가하고 싶은 것은이 경고에서 프로그래밍 방식으로 확인을 클릭하여 소스 페이지가 유용하게 되돌아 갈 수 있다는 것입니다. 이게 가능해?

도움이 되었습니까?

해결책

JavaScript는 단일 스레드입니다. 즉, 함수를 호출 할 때 반환 될 때까지 차단됩니다. alert ()를 호출하면 브라우저에 제어를 전달하여 처리 방법을 결정합니다. UI 대화 상자를 팝업하는 JavaScript가 아니며 브라우저입니다. 브라우저가 "OK"이벤트를 수신하고 제어를 반환 할 때까지 ALERT ()가 반환되지 않습니다. JavaScript 스레드가 발생할 때까지 중단됩니다.

따라서 위의 단락에 명시된 두 가지 다른 이유에 대해 대답은 아니요 :)

다른 팁

나는 그것이 불가능하다고 확신합니다.

경고의 텍스트를 알고 있고 더러워지는 것을 신경 쓰지 않으면 문제가되지 않아야합니다.

Iframe Window의 경고를 자신의 효과로 무시하고 ..

document.getElementById("InnerFrameName").contentWindow.alert = function(){
    if (arguments[0].toLowerCase() == "innerframe alert text")
        return; //supress
    else
        alert(arguments[0]);
};

편집 : 프록시 핸들러로 약간의 테스트를했습니다 (asp.net/c#에 있지만 아이디어를 얻어야합니다) ...

테스트의 외부 페이지는 경고를 표시하는 버튼이있는 W3 페이지입니다. 이제 경고가 사용자 정의 된 기능을 통해 전달됩니다.

나는 이것이 당신이 얻고 싶은 것이 더 더럽다고 확신합니다.

페이지:

<%@ 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>

프록시 핸들러 :

<%@ 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;
        }
    }
}

코드에서 NO-OP로 경고를 무시하면 어떻게됩니까?

예를 들어

<script>
// uncomment next line to swallow alerts
//  function alert(nope) { return; }
<script>
<script>
  $(document).ready(function() { alert("Hello, world!"); });
</script>

줄이 댓글을 달면 Alert가 나타납니다. 줄이 댓글을 달면 Alert가 나타나지 않습니다.

나는 그것을 의심합니다. 별도의 도메인이라면 통제 할 수없는 도메인을 의미합니까?

제어가있는 경우 알림을 모달 자바 스크립트 상자로 변경하여 제어 할 수 있습니다.

성가신 JavaScript로 문제를 해결하는 가장 좋은 방법은 클라이언트 측 스크립팅 도구와 다음과 같은 것을 무시하는 것입니다. Greasemonkey.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top