2016-09-28 11 views
0

私は特定のJavaScriptパッケージを読み込むWebページを持っています。URLを介してDjangoページのJavaScriptを再ロードせずに実行する

www.mySite.com 

ブラウザのコンソールにJavaScriptコマンドを入力すると、それらとやり取りできます。

は簡単な例として

alert('5') 

を取ることができます。

私は同じようにJavaScriptがブラウザのコンソールなしではなく、特定のURLを介して実行されるように呼び出しを希望:これは私のJavaScriptのコマンドの実行につながるよう

www.mySite.com/?value=5 

このページは再読み込み/リフレッシュされずに実際の状態にとどまりません。

私のアプローチは、私のDjangoビューで拡張URLをキャッチし、JavaScriptコマンドを実行することでした。

ビュー:

class ShowPage(View): 
    def get(self, request, caseId): 

     value = request.GET.get('value', '') 

     if(value is not ''): 
      // execute JavaScript here... 
      return HttpResponse("<script>alert(" + value + ")</script>") 
     else: 
      ... 
      return render(request, 'template.html', context) 

しかし、これは私がURLを入力し、私のページの損失につながります。

実際のブラウザコンテンツを保存する方法を知っている人はいますか? ロードされたJavascriptパッケージを呼び出すことは可能ですか?

もう1つのアイデアは、JavaScriptをAjax経由で呼び出すことでした。しかし、DjangoのURLをAjaxリクエストにどのようにマップするのですか?

答えて

-1

は '#' を使用してください:

www.mySite.com#command 

これは、サイトをリロードしません。

多分これはあまりにも役立ちます

URL:https://css-tricks.com/snippets/javascript/get-url-and-url-parts-in-javascript/

URL:Get current URL in web browser

'#':http://www.w3schools.com/html/html_links.asp

EDIT:実行する

使用 'のeval()を'入力:

http://www.w3schools.com/jsref/jsref_eval.asp

+0

'eval'を使用していますか?通常は悪い考えです。それを使用してGET入力を実行しますか?ええ、それはしないでください:) – brianpck

+0

ええ、ユーザーは悪いことをすることができますが、とにかく彼は適切な既知の方法で(手動でページをコピーして編集して)行うことができるものだけです。しかし、実際のアプリケーションでは、使用可能なコマンドをフィルタリングするのが良いでしょう/ 'eval'を使用しないでください。 – Zeromatiker

1

あなたの現在のコードは、多くのレベルで問題があります。特に、ユーザーがページ上で任意のJSを実行できるためです。これはCross-site Scripting (XSS) attackと呼ばれます。

もう1つの問題は、ページの「状態を変更する」ことなくGETパラメータを追加すると思われることです。ここでは、GETリクエストは定義上、クライアントとサーバーの間の通信であることを覚えておく必要があります。 JSを使用してURLの外観を人為的に変更できますが、リロードせずに同じページでGETリクエストを送信することはできません。

AJAXを使用して、別のページから別のページにコンテンツを取得し、バックグラウンドで現在のページに戻すことができます。通常これは、JsonResponse(Django 1.7以降)を返すビューを作成することで行います(Creating a JSON response using Django and Python参照)。

簡略化した例は、単純にテキストを表示するビューをエンコードすることです。その後、AJAXを使ってこのテキストを取得することができます(これはjQueryを推奨します - シンプルでよく文書化されています)。alertを含めて、何でもしてください。

関連する問題