有没有办法在location.replace中添加document.url(在Javascript中)

时间:2011-10-08 09:42:25

标签: javascript javascript-events

这就是我想要完成的事情

location.replace('http://localhost:8888/test/index.php?site=' + document.URL);

所以我需要将当前url作为'site'变量的字符串发送。虽然document.URL不起作用,有没有办法让它工作?

这个想法是当我去index.php时,'site'被插入到数据库中。我希望上面的链接可以作为书签使用,(问题的第二部分)有没有办法执行该代码但仍然保留在同一页面中?

基本上如果我在google.com并点击书签来执行上面的代码,有没有办法留在google.com但是..index.php在后台运行

目前我真的需要帮助解决问题的第一部分 - 但也许你有关于如何实现第二部分的任何提示 - 非常感谢

1 个答案:

答案 0 :(得分:3)

  • 使用encodeURIComponent(location.href)代替document.URL *
    1. 您可以创建一个IFRame,并设置它的src属性。
    2. 另一种选择是执行XMLHttpRequest [1]
    3. (new Image).src = url
    4. window.open(url)(可能会阻止,阻碍用户)
    5. 创建表单并提交表单(使用target=__,其中__可以是_blank或框架名称。

[1] 此方法不适用于不同的域。另见:MDN: Using XMLHttpRequest

另一种方法(允许以JavaScript代码的形式从服务器传递反馈)。

javascript:void(function(){
    var s = document.createElement("script");
    s.src = "http://localhost:8888/test/index.php?site="
              + encodeURIComponent(location.href);
    document.body.appendChild(s);
})();

使用图片:

javascript:void(function(){
    (new Image()).src = "http://localhost:8888/test/index.php?site=" +
         encodeURIComponent(location.href);
})();

编辑提醒+自动关闭

根据评论中的要求,一个纯JS警报会在经过一段时间后自动关闭。出于教育目的,我保持功能简单。如果你很懒,JQuery也是一个选项,虽然包含自动隐藏“警报”框的整个框架是不合适的

/* @name        alertFade
   @description Shows a message, closing automatically after # milliseconds
   @param String message      Message to display
   @param number autoclose_ms Time in milliseconds till the message has to be closed
   @param number softFade_ms  Time in milliseconds for the fade animation*/
function alertFade(message, autoclose_ms, softFade_ms){
    if(typeof message == "undefined") message = "";
    if(isNaN(autoclose_ms)) autoclose_ms = 3000;
    if(isNaN(softFade_ms)) softFade_ms = 1000;
    var container = document.createElement("div"),
        alertBox = document.createElement("div"),
        alertContent = document.createElement("div"),
        dismiss = document.createElement("div");
    container.style.cssText = "position:fixed;top:0;left:0;width:100%;height:100%;display:table;opacity:1;background:transparent;";
    alertBox.style.cssText = "display:table-cell;vertical-align:middle;text-align:center;";
    alertContent.style.cssText = "display:inline-block;white-space:pre-wrap;word-wrap:break-word;background:#DDF;font-size:normal;padding:5px";
    dismiss.style.cssText = "font-size:small;border-bottom:1px solid #CCC";

    dismiss.appendChild(document.createTextNode("(Click to dismiss)"));
    dismiss.onclick = fadeClose;
    alertContent.appendChild(dismiss);
    alertContent.appendChild(document.createTextNode(message));
    alertBox.appendChild(alertContent);
    container.appendChild(alertBox);
    document.body.appendChild(container);
    var alertAutoClose = window.setTimeout(fadeClose, autoclose_ms);
    var fadeTimer;

    function closeAlert(){
        window.clearTimeout(alertAutoClose);
        window.clearInterval(fadeTimer);
        if(container.parentNode) container.parentNode.removeChild(container);
    }
    function fadeClose(){
        if(!softFade_ms) return closeAlert(); //No fade = close immediately

        var opacity = 1;
        fadeTimer = window.setInterval(function(){
            opacity -= .1; //Reduce the opacity by 10% per interval
            if(opacity <= 0) return closeAlert();
            container.style.opacity = opacity;
        }, softFade_ms/10);
    }
}
//Example:
alertFade("Message!");