2009-08-27 4 views
0

私のWebサイトには約40ページのaspxページがあります。 40ページのいずれかが読み込まれたときに呼び出される必要があるjavascript関数を使用したいと思います。 何かのように複数のWebページ用のシングルJavaScript機能

私は、この機能を40ページの各ページの "head"セクションに置いて、body onloadイベントを呼び出すことができます。しかし、私はこの機能を単一の場所に持たせたいと思っています。 これは既存のアプリですので、マスターページを作成してすべてのページを派生させることはできません。

アイデア?

+1

既存のアプリにマスターページを追加することはできますが、ちょっと面倒ですが完全に可能です。 –

答えて

0

難しい/巧妙にしたい場合は、スクリプトを挿入するHttpModuleを作成することができます。そうすれば、それは1つの場所にしかないので、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 

エンドクラス

サンプルはここでは、JavaScriptのファイルを作成することができますweb.configファイル内のエントリに完全にクライアント側のソリューションについては

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

+0

良いアプローチのように聞こえます。それについてどうやって行くのか手掛かりはありますか?それでもすべてのaspxページを変更する必要がありますか? – AgentHunt

+0

これを試してみましょう:) – AgentHunt

+0

このようなコーディングを追加すると、aspxページのbody onLoadイベントでjavascript関数を呼び出すと機能的に同等ですか? 例: <ボディのonload = "警告( 'こんにちは')"> 私が代わりにRegisterStartupScriptを使用する必要がありますか? – AgentHunt

1

これらのすべてのページに継承される基本クラスを作成し、そこにjavascriptを挿入するロジックを記述することができます。だから、

、それのような何かをする:あなたは、関数を配置する必要があります

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

コードビハインドファイル(aspx)を変更しないようにしたいと思います。vb) – AgentHunt

+0

AgentHunt、いいえ、あなたのコードビハインドで大きな変更を行う必要はありません、あなただけがそれからベースクラスを作成し、aspxを継承する必要があります。私は自分の投稿を編集して、アーカイブする方法を教えてくれました。 – Cleiton

5

[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分離コードへ:

は、基本クラスを作成します。 jsファイルを作成してページから呼び出すことはできますが、マスターページを追加できないため、40ページすべてでスクリプトにリンクする必要があります。

0

新しい機能を持つ新しいJSファイルを組み込むためにmasterpageを変更するか、masterページに既に含まれているJSファイルの1つにJS関数を配置する必要があります。

+0

wwwrootの下に何らかのjs/htmファイルがあり、aspxページでこのファイルを参照する方法はありますか?ページがロードされると、htmファイルのjavascript関数が自動的に呼び出されます。 – AgentHunt

+0

できます。ソリューションエクスプローラからスクリプトを40ページごとにドラッグするだけです。 – Rob

0

だです(おそらくscript.jsという名前の)マスターページの先頭からリンクします。そのファイルにあなたの機能を入れてください。

ので、script.jsファイル内のJavaScriptは、このようなものになるだろう:あなたのページ

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

、その後、あなたのonloadが

ことができるの頭の中で

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

、その後、

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

楽しいです:)

robb

関連する問題