如何确定调用动态javascript文件的页面和ASP.net中的用户
我正在使用asp.net中生成的动态JavaScript文件,然后作为普通JavaScript嵌入到html页面中。我有没有办法确定动态javascript是直接打开的还是通过html页面中的嵌入脚本打开的如何确定调用动态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
<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&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&clcid=0x409"
title="MSDN ASP.NET Docs">documentation on ASP.NET at MSDN</a>.
</p>
</asp:Content>