Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在JavaScript中模拟点击警报?_Javascript_Alerts - Fatal编程技术网

有没有办法在JavaScript中模拟点击警报?

有没有办法在JavaScript中模拟点击警报?,javascript,alerts,Javascript,Alerts,我有一个带有iframe的页面,其源页面位于单独的域中。源页面会不时生成警报。当它执行此操作时,它会停止正在执行的操作,直到用户单击“确定”以显示警报 我想做的是以编程方式单击此警报上的OK,这样源页面就可以恢复有用状态。这可能吗?我很肯定这不可能。我非常怀疑。如果说独立域,你是指你无法控制的域吗 如果您有控制权,您可以将警报更改为模态Javascript框,您可以对其进行控制。Javascript是单线程的,这意味着当您调用函数时,它会阻塞直到返回。调用alert()时,它会将控件传递给浏览器

我有一个带有iframe的页面,其源页面位于单独的域中。源页面会不时生成警报。当它执行此操作时,它会停止正在执行的操作,直到用户单击“确定”以显示警报


我想做的是以编程方式单击此警报上的OK,这样源页面就可以恢复有用状态。这可能吗?

我很肯定这不可能。

我非常怀疑。如果说独立域,你是指你无法控制的域吗


如果您有控制权,您可以将警报更改为模态Javascript框,您可以对其进行控制。

Javascript是单线程的,这意味着当您调用函数时,它会阻塞直到返回。调用alert()时,它会将控件传递给浏览器,由浏览器决定如何处理该控件。弹出UI对话框的不是Javascript,而是浏览器。在浏览器收到“OK”事件并返回控件之前,alert()不会返回。javascript线程将暂停,直到发生这种情况


因此,出于上述段落中所述的至少两个不同的原因,答案是:no:)

如果您在代码中使用no op覆盖警报,会发生什么

e、 g


//取消注释下一行以删除警报
//函数警报(nope){return;}
$(document).ready(函数(){alert(“Hello,world!”;});

注释掉该行后,将显示警报。注释行后,警报不会出现。

解决恼人的JavaScript问题的最佳方法是使用客户端脚本工具覆盖它,如。

如果您知道警报文本,并且不介意弄脏,则不应该出现问题

您可以使用自己的警报覆盖iframe窗口的警报,并执行以下操作

document.getElementById("InnerFrameName").contentWindow.alert = function(){
    if (arguments[0].toLowerCase() == "innerframe alert text")
        return; //supress
    else
        alert(arguments[0]);
};
编辑:我用一个代理处理程序做了一个小测试(它在asp.net/c中,但你应该明白了)

我的测试中的外部页面是一个w3页面,带有一个显示警报的按钮,警报现在通过用户定义的函数传递

我相信这比你想要的脏多了

第页:


你好,来自MyPage
函数frameLoaded(){
document.getElementById(“InnerFrameName”).contentWindow.alert=函数(){
if(参数[0].toLowerCase()=“我是一个警报框!!”){
警报(“消息将被禁止:+参数[0]);
return;//suppress
}否则{
警报(参数[0]);
}
};
}
内部页面(顶层)

德普!。。。
代理处理程序:

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

使用制度;
使用System.Web;
公共类页面代理:IHttpHandler{
公共void ProcessRequest(HttpContext上下文){
byte[]externalPage=new System.Net.WebClient().DownloadData(context.Request[“externalURI”]);
context.Response.OutputStream.Write(externalPage,0,externalPage.Length);
context.Response.End();
}
公共布尔可重用{
得到{
返回false;
}
}
}

这是一个很好的替代方案,假设开发人员不介意全面丢失警报。即使有问题的代码位于源位于单独域中的iframe中,这种方法是否有效?我在iframe的父级中尝试过这种方法,但它对iframe生成的警报没有影响。但是,它确实会抑制iframe父级生成的所有警报。@不管是谁否决了这一点:看看这个问题,它是一个直接的是否、可能还是不可能的问题。其他的答案更好,但是第一个正确回答问题的人会投反对票吗?奇怪。技术上正确的+1。我的问题是是/否,是/否是我是否可以完全用JavaScript完成。iframe源位于外部域中,因此在我尝试此操作时权限被拒绝。是的,我担心域权限会导致问题,唯一的解决办法是创建一个本地代理页面/处理程序等来加载远程页面,这样它就在域中,这个脚本应该可以工作。证实了我的怀疑。我需要在JavaScript之外使用一些东西,或者用它来代替JavaScript。JavaScript线程没有停止,消息仍然被压缩,任何计时器或异步更改仍然会触发事件处理程序,这些处理程序中的JS仍然会运行。
<%@ 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;
        }
    }
}