【问题标题】:Execute JavaScript on Django Page through URL without reload通过 URL 在 Django Page 上执行 JavaScript 而无需重新加载
【发布时间】:2016-09-28 23:20:47
【问题描述】:

我有一个加载某些 JavaScript 包的网页。

www.mySite.com

如果我在浏览器控制台中输入 JavaScript 命令,我就可以与它们进行交互。

让我们来

alert('5')

作为一个简单的例子。

我希望在没有浏览器控制台的情况下执行相同的 JavaScript 调用,而是通过特定的 URL,例如:

www.mySite.com/?value=5

这样会导致执行我的 JavaScript 命令吗?

没有重新加载/刷新页面但保持实际状态。

我的方法是在我的 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包了?

另一个想法是通过 Ajax 调用 JavaScript。但是如何将 Django 中的 URL 映射到 Ajax 请求?

【问题讨论】:

    标签: javascript ajax django


    【解决方案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 它。

    【讨论】:

      【解决方案2】:

      尝试使用“#”:

      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

      【讨论】:

      • 使用eval?通常是个坏主意。使用它来执行 GET 输入?是的,不要那样做:)
      • 是的,用户可以做坏事,但只有在适当的知识下他可以做的事情(手动复制和编辑页面)。但在实际应用中,最好过滤可用命令/不要使用eval
      猜你喜欢
      • 2017-12-05
      • 2016-01-12
      • 1970-01-01
      • 2019-05-06
      • 2016-02-16
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多