Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.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文件的页面和ASP.net中的用户_Javascript_C#_Html_Asp.net - Fatal编程技术网

如何确定调用动态javascript文件的页面和ASP.net中的用户

如何确定调用动态javascript文件的页面和ASP.net中的用户,javascript,c#,html,asp.net,Javascript,C#,Html,Asp.net,我正在使用asp.net中生成的动态JavaScript文件,然后作为普通JavaScript嵌入到html页面中。我有没有办法确定动态javascript是直接打开的还是通过html页面中的嵌入脚本打开的 <script src="http://localhost:60919/js.ashx" type="text/javascript" charset="utf-8"></script> 如果这是从网页调用的,您应该会看到referer属性中列出的加载页面 cont

我正在使用asp.net中生成的动态JavaScript文件,然后作为普通JavaScript嵌入到html页面中。我有没有办法确定动态javascript是直接打开的还是通过html页面中的嵌入脚本打开的

<script src="http://localhost:60919/js.ashx" type="text/javascript" charset="utf-8"></script>

如果这是从网页调用的,您应该会看到referer属性中列出的加载页面

context.Request.UrlReferrer

如果由用户直接加载,则应为null。但是,垃圾邮件发送者/黑客可以手动设置referer以独立于您的页面访问脚本

更新:Handler.ashx:

<%@ WebHandler Language="C#" Class="Handler" %>

using System;
using System.Web;

public class Handler : IHttpHandler {

    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/javascript";
        context.Response.Write("alert('"+context.Request.UrlReferrer+"');\n");
    }

    public bool IsReusable {
        get {
            return false;
        }
    }

}

使用制度;
使用System.Web;
公共类处理程序:IHttpHandler{
公共void ProcessRequest(HttpContext上下文){
context.Response.ContentType=“text/javascript”;
context.Response.Write(“警报(“+context.Request.urlReferer+”);\n”);
}
公共布尔可重用{
得到{
返回false;
}
}
}
Default.aspx:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeFile="Default.aspx.cs" Inherits="_Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <script src="Handler.ashx"></script>
    <h2>
        Welcome to ASP.NET!
    </h2>
    <p>
        To learn more about ASP.NET visit <a href="http://www.asp.net" title="ASP.NET Website">www.asp.net</a>.
    </p>
    <p>
        You can also find <a href="http://go.microsoft.com/fwlink/?LinkID=152368&amp;clcid=0x409"
            title="MSDN ASP.NET Docs">documentation on ASP.NET at MSDN</a>.
    </p>
</asp:Content>

.

你也可以找到。


由网页加载时显示警报。直接访问时,警报(“”)。

您是想在客户端还是在服务器端进行此确定?在服务器端最好。为什么需要检测此情况?我想根据调用类型触发一个操作。您是否可以使用仅由嵌入代码或动态代码设置的隐藏字段?然后,您可以将一个“onChange”事件侦听器连接到它并关闭它。它什么时候为空?始终还是仅在直接呼叫时?您可能需要改用context.Request.ServerVariables[“HTTP\u REFERER”],它似乎总是返回null。这就是我尝试的:public void ProcessRequest(HttpContext context){string referer=context.Request.ServerVariables[“HTTP_referer”];}似乎可以工作,但只有在从aspx页面调用时,但是当我从html页面调用它时,它仍然显示为空。你可以使用Chrome的调试器来验证引用者是否设置了从网页加载的内容。如果有,它应该显示在请求变量中。它在HTML页面中保持空白,但在ASPX页面中工作,但我需要让它在HTML中工作。有什么想法吗?
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeFile="Default.aspx.cs" Inherits="_Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <script src="Handler.ashx"></script>
    <h2>
        Welcome to ASP.NET!
    </h2>
    <p>
        To learn more about ASP.NET visit <a href="http://www.asp.net" title="ASP.NET Website">www.asp.net</a>.
    </p>
    <p>
        You can also find <a href="http://go.microsoft.com/fwlink/?LinkID=152368&amp;clcid=0x409"
            title="MSDN ASP.NET Docs">documentation on ASP.NET at MSDN</a>.
    </p>
</asp:Content>