2009-08-27 4 views
0

У меня около 40 страниц aspx на моем сайте. Я хочу использовать функцию javascript, которую нужно вызывать, когда загружается любая из 40 страниц. что-то вродеОтдельная функция javascript для нескольких веб-страниц

Я мог бы использовать эту функцию в разделе «head» на каждой из 40 страниц aspx, а затем вызвать событие onload body. Но я хотел бы иметь эту функцию в одном месте. Это существующее приложение, поэтому я не могу создать главную страницу и получить из нее все страницы.

Любые идеи?

+1

Вы все еще можете добавить мастер-страницы в существующее приложение - это немного утомительно, но вполне возможно. –

ответ

0

Я полагаю, что если вы хотите сделать это сложным/изящным, вы можете создать HttpModule, который вводит скрипт. Таким образом, это только в одном месте, и вы можете подключить его в web.config.

Вот пример HttpModule

Public Class JavascriptInjector 
Implements IHttpModule 



Public Sub Init(ByVal context As System.Web.HttpApplication) Implements System.Web.IHttpModule.Init 
    AddHandler context.PreRequestHandlerExecute, AddressOf PreRequestHandlerExecute 
End Sub 

Private Sub PreRequestHandlerExecute(ByVal sender As Object, ByVal e As EventArgs) 

    Dim myPage = TryCast(HttpContext.Current.CurrentHandler, Page) 
    If myPage Is Nothing Then Exit Sub 
    AddHandler myPage.InitComplete, AddressOf Page_Init 

End Sub 

Sub Page_Init() 
    Dim myPage = TryCast(HttpContext.Current.CurrentHandler, Page) 
    If myPage Is Nothing Then Exit Sub 
    Dim path = myPage.ResolveUrl("~/js/jscript.js") 
    myPage.ClientScript.RegisterClientScriptInclude(myPage.GetType, "common", path) 
End Sub 

Public Sub Dispose() Implements System.Web.IHttpModule.Dispose 

End Sub 

End Class

Вот запись в web.config

<httpModules> <add name="javascriptInjector" type="JavascriptInjector"/> </httpModules>

+0

Звучит как хороший подход. Любой подскажет, как это сделать? Будет ли он по-прежнему включать изменения во все страницы aspx? – AgentHunt

+0

Я попробую это и дам вам знать :) – AgentHunt

+0

Будет ли добавление такого кода функционально эквивалентным вызову функции javascript в body onLoad-событии страницы aspx? Пример: <тело OnLoad = "предупреждение ('Hello')"> Должен ли я использовать RegisterStartupScript вместо этого? – AgentHunt

1

Вы можете создать базовый класс, который будет наследоваться всеми этими страницами и написать логику вставки в него javascript.

Таким образом, сделать что-то вроде этого:

Создать базовый класс:

[Serializable] 
public class RequiresFunctionBasePage : System.Web.UI.Page 
{ 
    public RequiresFunctionBasePage() 
    { 
     this.Load+= new delegate 
     { 
      this.ClientScript.RegisterClientScriptInclude("yourScript", "http://yoursite.com/yourJs.js"); 

      this.ClientScript.RegisterStartupScript(this.GetType(), 
        "functionOnload", "functionName();", true); 
     } 
    } 
} 

И в вашем ASPX коде:

public partial class yourPageNameGoesHere : RequiresFunctionBasePage 
{ 
(...) 
+0

Я хотел бы держаться подальше от внесения изменений в файлы с кодом (aspx.vb) – AgentHunt

+0

AgentHunt, нет, вам не нужно сильно изменять свой код, только вам нужно создать базовый класс и наследовать ваш aspx. Я редактировал свой пост, чтобы показать вам, как вы его архивируете. – Cleiton

5

Вам нужно будет поставить функцию в. js-файл и вызов со своих страниц, но вам нужно будет сослаться на скрипт на всех ваших 40 страницах, так как вы не можете добавить главную страницу.

0

Вам необходимо будет изменить главную страницу, чтобы добавить новый JS-файл с вашей новой функцией или разместить JS-функцию в одном из файлов JS, уже включенных в главную страницу.

+0

Можно ли каким-либо образом создать файл js/htm под wwwroot и просто ссылаться на этот файл на страницах aspx, так что при загрузке страницы функция javascript в файле htm автоматически вызывается. – AgentHunt

+0

Вы конечно можете. Просто перетащите скрипт из браузера решений на каждую из 40 страниц aspx. – Rob

0

Для полностью на стороне клиента решения, которое вы могли бы создать файл JavaScript (возможно, с именем script.js), с которым вы ссылаетесь, с главной страницы мастера. В этом файле поместите свою функцию.

Таким образом, Javascript в файле script.js будет что-то вроде этого:

function SampleFunction(text) { 
    alert(text); 
// or whatever code you want 
} 

, а затем в голове ваших страниц

<script type="text/javascript" src="script.js"></script> 

, а затем ваш OnLoad может быть

onload="SampleFunction('hi there');" 

получить удовольствие :)

robb

Смежные вопросы