【问题标题】:How to call a function with href to other page on HTML如何使用href调用函数到HTML上的其他页面
【发布时间】:2020-03-07 08:31:17
【问题描述】:

所以我有 3 个链接:1、2 和 3,它们都转到同一个页面,并且每个都有我想要的功能(1()、2() 和 3()),当您转到其中一个时这些页面从主页转到 123.html 并运行 1() 或 2(),具体取决于他们单击的按钮。

我试过了:

<li><a href="123.html?javascript:1();"><span>Link1</span></a></li>

但它根本没有运行该功能。我希望所有这些都像这样:

<li><a href="123.html?javascript:1();"><span>Link1</span></a></li>
<li><a href="123.html?javascript:2();"><span>Link2</span></a></li>
<li><a href="123.html?javascript:3();"><span>Link3</span></a></li>

【问题讨论】:

  • 您不能在另一个页面上执行功能。您可以在该页面上添加代码以查找查询字符串,但您无法直接从页面 A 执行任何操作。
  • 有很多方法可以仅使用前端将数据从页面 A 获取到页面 B。然而,所有这些都将永远是kludges;正确的方法是学习如何使用合适的后端,如 PHP(或使用合适的框架创建 SPA)。
  • 这能回答你的问题吗? Persist variables between page loads

标签: javascript html


【解决方案1】:

除非您要访问的页面在 url 中查找 javascript 查询字符串,否则您不能将 javascript 传递给这样的页面。

最好发送一个查询字符串变量,例如?action=Link1,然后让一些javascript检查“动作”。然后,您可以根据操作是什么来运行一个函数。

通过查看window.location 变量,您可以找到很多可以为您执行此操作的函数

【讨论】:

    【解决方案2】:

    这不是做事的方式。 您可以做的是在链接中添加一个参数,例如

    ?function:1.

    然后您可以像这样在123.html 页面上提取参数:

    var url_string = window.location.href
    var url = new URL(url_string)
    var c = url.searchParams.get("function")
    

    c 的值将是 1、2 或 3。这样您就可以创建一个 switch 语句并选择要执行的函数:

    switch(c) {
      case 1:
        function1()
        break
    }
    

    我不建议这样工作,但如果你想那样做,你去吧。

    【讨论】:

    • 这看起来可行,但我的 javascript 无法正常工作,即使我在 URL 中添加了警报,它也不会显示任何内容。´
    • file:///C:/Users/me/Desktop/site/123.html?javascript:alert(%22test%22);这根本不起作用。
    • 您应该在文件中而不是在 url 中执行该函数。而不是上面 switch 语句中的function1() 使用您的警报
    【解决方案3】:

    基于 similar question 你不能 (1st answer),但扩展 this answer 你可以做这样的事情

    a.html

    <li><a href="b.html#fb('a', 'b');"><span>Link1</span></a></li>
    

    b.html

    <script>
    // get hash from url
    var hash = window.location.hash;
    
    // clean
    hash = hash.replace('#', '');
    hash = hash.replace(';', '');
    hash = hash.replace(new RegExp("%20", "g"), "");
    
    const fb = (a, b) => {
        console.log(a);
        console.log(b);
    }
    
    // Option 1:
    
    /**
     * parse all parameters from string to an array
     */
    const parseParams = (str) => {
        let params = str.split(/[/(/)]/)[1].split(',');
        for (i=0; i < params.length; i++) {
            params[i] = params[i].replace(new RegExp("'", "g"), "");
        }
        return params;
    }
    
    // check for existing function - parse only the function name
    switch(hash.substring(0, hash.indexOf("("))) {
        case "fb":
            var params = parseParams(hash);
            fb(...params);
            break;
        default:
            break
    }
    
    // Option 2 (easy solution but try to avoid this):
    eval(hash);
    </script>
    

    【讨论】:

    • 运行一个函数似乎有点过于复杂:D
    • 如果您需要向该函数调用添加参数,那么您必须进行解析,这增加了这种复杂性。
    • 当然可以,但他可以只解析 function=1,然后在另一个文件中 if(function === 1) 执行该函数,而不是将其传递到 url 中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 2023-01-10
    • 2016-07-05
    • 1970-01-01
    • 2017-01-19
    相关资源
    最近更新 更多