2016-09-28 92 views
0

我有一個加載特定JavaScript包的網頁。通過URL在Django頁面上執行JavaScript,無需重新加載

www.mySite.com 

如果我在瀏覽器控制檯中輸入JavaScript命令,我可以與它們進行交互。

讓我們

alert('5') 

作爲一個簡單的例子。

我想同一個JavaScript調用,而瀏覽器控制檯,而是通過像一個特定的URL來執行:

www.mySite.com/?value=5 

讓這導致我的JavaScript命令執行?

沒有Page beeing重新加載/刷新,但仍處於實際狀態。

我的方法是在我的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) 

但是,這導致了我的頁面的損失在那裏我輸入的網址。

有沒有人有一個想法如何保留實際的瀏覽器內容? 這樣就可以調用加載的Javascript包?

另一個想法是通過Ajax調用JavaScript。但是,我如何將Django中的URL映射到Ajax請求?

回答

-1

嘗試使用 '#':

www.mySite.com#command 

這不加載該網站。

也許這也有幫助:

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

網址:Get current URL in web browser

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

編輯:

利用 '的eval()' 執行輸入:

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

+0

使用'eval'?通常是一個壞主意。使用它來執行GET輸入?是的,不要這樣做:) – brianpck

+0

是的,用戶可以做壞的事情,但只有他可以做的事情與相應的知識(手動複製和編輯頁面)。但是在真正的應用程序中,過濾可用的命令會很好/不要使用'eval'。 – Zeromatiker

1

您當前的代碼是在很多層面上有問題的,特別是因爲它允許用戶在網頁上執行任意的JS。這被稱爲Cross-site Scripting (XSS) attack

的另一個問題是,你似乎要添加一個GET參數,而「改變的狀態」頁面。在這裏您必須記住,根據定義,GET請求是客戶端和服務器之間的通信。您可以使用JS人爲地更改URL的外觀,但不能在同一頁面上提交GET請求而不重新加載它。

這就是您一定想要使用AJAX的原因,它允許您從另一頁獲取內容並將它們返回到當前頁面的背景中。通常這是通過創建一個返回JsonResponse(在Django 1.7+中)的視圖完成的(請參閱Creating a JSON response using Django and Python)。

一個簡單的例子是編碼一個簡單顯示一些文本的視圖。然後你可以使用AJAX檢索這個文本(我推薦jQuery爲此 - 它很簡單並且有很好的文檔記錄),並且可以隨它做任何你想做的事情,包括alert它。

相關問題