【问题标题】:Change script code on URL hash change更改 URL 哈希更改的脚本代码
【发布时间】:2016-06-16 01:23:09
【问题描述】:

我有一个脚本,如下例所示:

<script type="text/javascript">
var _myplug = _myplug || {};
_myplug.key = '12e9u349u43098j8r940rjciocjo';
_myplug.renderTo = '';
window.myplug||(function(d) {
    var s,c,o=myplug=function(){ o._.push(arguments)};o._=[];
    s=d.getElementsByTagName('script')[0];c=d.createElement('script');
    c.type='text/javascript';c.charset='utf-8';c.async=true;
    c.src='js/loader.js?';s.parentNode.insertBefore(c,s);
})(document);
</script>

我确切地知道我必须做哪些改变,但我不知道如何在编码语言中实现这一点。

我需要做的是:

  • 当 URL 哈希更改为“triggerURL”时,_myplug.renderTo = 'happy';
  • 当 URL 哈希再次更改为“triggerURL”以外的任何内容时 _myplug.renderTo = ''

这是因为 URL 可以随时更改(无需离开页面),并且每次发生上述哈希更改时,都需要以某种方式完成其他描述的更改。

任何有解决方案的人.....非常感谢!

【问题讨论】:

    标签: javascript jquery hash triggers


    【解决方案1】:
    <script type="text/javascript">
    var _myplug = _myplug || {};
    _myplug.key = '12e9u349u43098j8r940rjciocjo';
    _myplug.renderTo = '';
    window.myplug||(function(d) {
        var s,c,o=myplug=function(){ o._.push(arguments)};o._=[];
        s=d.getElementsByTagName('script')[0];c=d.createElement('script');
        c.type='text/javascript';c.charset='utf-8';c.async=true;
        c.src='js/loader.js?';s.parentNode.insertBefore(c,s);
    })(document);    
    
    function changeHash () {
       var hash = (window.location.hash || '#').slice(1);
       if (hash === 'triggerURL') {
           _myplug.renderTo = 'happy';
       } else {
           _myplug.renderTo = '';
       }
    }
    
    changeHash(); // init 
    window.addEventListener('hashchange', changeHash, false);
    </script>
    

    【讨论】:

    • 非常感谢您的快速回复,请原谅我的“非常好的”脚本知识,但是有人可以发布整个脚本吗?这是因为我没有足够的知识将解决方案集成到现有脚本中。谢谢你。 (@Dmitriy Loskutov,@ZachRabbit)。一定有一个地方可以学(我在这里学到了很多)。
    • 哇它好用。但只有当我重新加载页面时(它会在正确的 URL 哈希上触发)。你知道如何在不刷新页面的情况下让它工作,但是每当出现指定的哈希更改时,即使没有重新加载页面?这才是真正的目标。谢谢。
    • 您的_myplug 是否支持此功能(跟踪 hashchange)?在某些情况下,您必须在加载脚本之前初始化 _myplug.renderTo = ""。如果您的 _myplug 不支持它,那么您可能根本不需要跟踪 hashchange 事件。
    • 是的,我认为这是证明这一点的最佳方式:当我在以 #triggerURL 结尾的 URL 上重新打开页面时,myplug 会出现在 ID 为“happy”的元素中(这就是 _myplug .renderTo 用于)。当我在以任何其他散列结尾的 URL 上重新打开页面时,myplug 出现在另一个位置,而不是在 ID 为“happy”的元素中,因此 myplug 正在根据 URL 散列执行工作,所以你添加到我的脚本代码(跟踪 hashchange)工作正常。但是需要添加一些其他的东西来告诉脚本不仅在页面加载时哈希 = 快乐与否,而且......
    • 简而言之:目前哈希跟踪仅在我重新加载页面时有效,但我正在寻找一种方法来跟踪页面未重新加载时出现的哈希更改。 (我将删除我的重复评论)
    【解决方案2】:

    您可以使用window 上的hashchange 事件来执行您的更改。在现代浏览器中,就这么简单:

    window.addEventListener('hashchange', function (ev) {
        if (window.location.hash === '#triggerURL') {
            // Your Code Here
        }
    }, false)
    

    您可以在 MDN 上找到更多信息以及适用于旧版浏览器的 polyfill。

    【讨论】:

    • 谢谢,它可以工作(请参阅@Dmitriy Loskutov 发布的对此的进一步实现。但它仅在我重新加载页面时才有效(它在正确的 URL 哈希上触发)。你知道如何让它在没有页面刷新的情况下工作,但是每当出现指定的哈希更改时,即使没有重新加载页面?也许我需要重新启动脚本,就像它在重新加载时一样?谢谢。
    猜你喜欢
    • 2013-03-12
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 2013-04-29
    • 2019-12-11
    • 2023-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多