如何从服务器生成Javascript文件
我正在使用BlogEngine.NET(一种很好的工具),并且正在使用TinyMCE编辑器,并且注意到有一个地方可以创建外部链接列表,但它必须是一个javascript文件:
external_link_list_url:" example_link_list.js"
当然,这很棒,但是我需要使用的链接列表需要从数据库中动态生成。这意味着我需要在页面加载时从服务器创建此JS文件。有人知道这样做的方法吗?理想情况下,每次访问编辑器时,我只想覆盖此文件。
谢谢!
解决方案
回答
如果我们不能更改文件扩展名(并且只返回纯文本,则调用者不必关心文件扩展名,js是纯文本),则可以在IIS上设置处理程序(假设它是IIS)来处理javascript文件。
有关如何在Windows中设置IIS 6来处理任何文件扩展名的信息,请参见此链接http://msdn.microsoft.com/zh-cn/library/bb515343.aspx。然后设置一个HttpHandler来接收对.js的请求(只需使用Google httphandler并查看许多类似这样的好教程:http://www.devx.com/dotnet/Article/6962/0/page/3)
回答
我将创建一个HTTPHandler,以从db中读取所需的数据作为响应。只需将HTTPHandler与Web配置中的特定文件名" example_link_list.js"关联即可。确保设置
context.Response.ContentType = "text/javascript";
然后就是context.Response.Write();外部链接列表
回答
只需将其指向一个aspx文件,然后将该文件吐出所需的任何javascript。我最近在PHP中使用TinyMCE进行了此操作,它就像一个魅力。
external_link_list_url:" example_link_list.aspx"
在aspx文件中:
<%@ Page Language="C#" AutoEventWireup="false" CodeFile="Default.aspx.cs" Inherits="Default" %>
在代码隐藏(C#)中:
using System; public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Response.Write("var tinyMCELinkList = new Array("); // put all of your links here in the right format.. Response.Write(string.Format("['{0}', '{1}']", "name", "url")); Response.Write(");"); } }
回答
如果第三方代码不需要javascript文件具有.js扩展名,则可以创建HTTPHandler并将其映射到web.config中的.axd或者.ashx扩展名,而无需更改IIS设置,因为这些扩展名由IIS自动配置为由asp.net处理。
<system.web> <httpHandlers> <add verb="*" path="example_link_list.axd" type= "MyProject.MyTinyMCE, MyAssembly" /> </httpHandlers> </system.web>
这指示IIS将对" example_link_list.axd"的所有请求(通过POST和GET)传递到MyAssembly程序集中的MyProject.MyTinyMCE类的ProcessRequest方法(.dll的名称)
我们也可以使用Visual Studio的"通用处理程序"模板,这将为我们创建一个.ashx文件和代码隐藏类。也无需编辑web.config。
使用HTTPHandler比使用.aspx页面更可取,因为.aspx请求具有更多相关的开销(所有页面事件等)。