2

我有一个场景,当用户单击链接时,他被定向到一个页面,我想在其中添加代码以获取变量并重定向到另一个页面。

.ie 用户点击<a href="sample.tpl">click here</a>

在 sample.tpl 我想写一个代码把他重定向到另一个页面

<script>
window.location="http://mydomain.com/?page_id=10"

但出于安全原因,我也想在这个新链接上发送一个变量而不将其附加到 url

我怎样才能通过一些安全的程序来做到这一点。

如果不清楚,请向我提问。

4

2 回答 2

4

您可以创建一个带有 的表单method="post",一个hidden带有您要传递的值的输入和一个submit样式为常规链接的按钮(如果您还想手动发送表单)。

submit()然后只需通过该方法手动或以编程方式提交表单


示例(页面加载后 3 秒后自动重定向) http://jsbin.com/avacoj/1/edit

html

<form method="post" action="http://mydomain.com/" id="f">
   <input type="hidden" name="page_id" value="10">
   <noscript><button type="submit">Continue</button></noscript> /* see below */
</form>

JS

window.onload = function() {
  var frm = document.getElementById('f');
  setTimeout(function() {
      frm.submit();
  }, 3000);
};

作为旁注,您可以考虑在标签submit内插入一个按钮,<noscript></noscript>以便即使用户设备上没有 js 也可以进行重定向,因此页面仍然可以访问。

于 2012-10-08T08:15:34.693 回答
4

除了 Fabrizio 的回答,有人编写了一个 javascript 函数,它允许您构建表单并POST在运行时通过它发送。

POST就像GET(变量附加到 url)除了变量是通过标头发送的。仍然可以伪造POST请求,因此您必须对数据执行某种验证。

function post_to_url(path, params, method) {
    method = method || "post"; // Set method to post by default, if not specified.

    // The rest of this code assumes you are not using a library.
    // It can be made less wordy if you use one.
    var form = document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);

    for(var key in params) {
        if(params.hasOwnProperty(key)) {
            var hiddenField = document.createElement("input");
            hiddenField.setAttribute("type", "hidden");
            hiddenField.setAttribute("name", key);
            hiddenField.setAttribute("value", params[key]);

            form.appendChild(hiddenField);
         }
    }

    document.body.appendChild(form);
    form.submit();
}

像这样使用:

post_to_url("http://mydomain.com/", {'page_id':'10'}, "post");

来源: JavaScript 发布请求,如表单提交

于 2012-10-08T08:20:31.370 回答