2017-07-09 13 views
0

こんにちは私はこのウェブサイトを構築しています:http://www.freiheitmedia.com/en/。 Themify Ultraテーマで構築されています。"hashchange"はWordpressで起動しません

私の目標は、リンクをスクロールしたりクリックしたりするときにURLの#something部分を取り除くことです。

テーマベースの解決策がなく、サポートスタッフが私を助けないので、JavaScript/jQueryで行う必要があります。

私はすでにテストされ、

は、次のコードは、私が好きなURLを置き換えることを知っている:

history.replaceState("",document.title,window.location.pathname + window.location.search); 

さて、問題は、私は、一見「なhashchange」イベントを発生させることはできませんということです。両方のケースで、私はフッターに次のコードを入れていますし、警告文が達していない。

<script> 
    window.addEventListener("hashchange", function(e){ 
     alert("hiii"); 
    }); 
</script> 

または

<script> 
    window.addEventListener("hashchange", function(e){ 
     alert("hiii"); 
    }, false); 
</script> 

私は疑うなhashchangeイベントは、テーマの設定によって阻止されるかもしれないことが、それはちょうど推測です。

「ハッシュチェンジ」が発砲していない理由はありますか?あなたの明確化コメントから

+0

あなたが求めていることは少し不明です。最初のコードブロックでコードを実行するときに 'hashchange'イベントが発生することを期待していますか? (あなたは、 'hashchangeは' history.replaceState'によって起動されません。)あるいは、最初のブロックのコードをトリガしてハッシュ変更に応答しようとしていますか? –

+0

FWIW、イベント(2番目と3番目のブロック)をフックするコードが正しいです(標準に準拠したブラウザの場合 - IE8以前ではなく、互換モードの場合はIE9 +ではありません)。 –

+0

@tjcrowderサイトにアクセスしてスクロールダウンすると、現在のセクションに応じてURLが変わることがわかります。具体的には#partが変更されます。私の目標は、この動作を防ぎ、いつもきれいなURL(#hashを付けない)を持たせることでした。だから私は "hashchange"イベントを聞いてこの動作にアクセスしようとしました。しかし何らかの理由で、 "hashchange"イベントがurlを変更したときにトリガされません。それは#partです。これは理解できますか? –

答えて

0

あなたがサイトを訪問し、スクロールダウンしたとき、あなたはURLの変更はあなたが何であるかのセクションによっていることがわかります。具体的#partの変更。。私の目標は、この動作を防ぎ、いつもきれいなURL(#hashを付けない)を持たせることでした。

おそらく、有用であることを意味するハッシュを(更新することでイベントをスクロールする応答だプラグインを見つけることであろうことを行うための最善の方法、あなたはそれをブックマーク場合は、ページのその部分に戻りますを取ります)をオフにします。ページ上のプラグインでハッシュを制御するために戦うことは悪い考えです。

非常に次善のものに

hashchange以来、プラグインはそれがhashchangeを発射しないよう、ハッシュを設定するhistory年代replaceStateまたはpushStateまたは類似を使用している必要があり、発射されていません。

// I DON'T RECOMMEND THIS APPROACH 
(function() { 
    function removeHash(url) { 
     var u = String(url || ""); 
     var x = u.lastIndexOf("#"); 
     return x == -1 ? u : u.substring(0, x); 
    } 
    var originalReplaceState = history.replaceState; 
    history.replaceState = function(state, title, url) { 
     url = removeHash(url); 
     return originalReplaceState.call(history, state, title, url); 
    }; 
    var originalPushState = history.pushState; 
    history.pushState = function(state, title, url) { 
     url = removeHash(url); 
     return originalPushState.call(history, state, title, url); 
    }; 
})(); 

再び、しかし、実際にそれがハッシュフラグメントを追加し、それを無効にすることにより、スクロールイベントに応答しているものは何でも見つけるのがベストです:あなたは、ハッシュフラグメントを取り除き、独自のバージョンでこれらの機能を置き換えることができます。

+0

@tjcrowderご回答いただきありがとうございました! :)私の場合、上記のコードは(推奨されていない)動作します。私はあなたの最初のアプローチによってあなたが何を意味するのかを知りたいと思います。 「ハッシュフラグメントを追加して無効にすることでスクロールイベントに応答しているものを見つけてください」とはどういう意味ですか? 「ハッシュフラグメントを追加する」方法あなたがそれについて詳述することができればいいと思う、私は学びたい: –

+0

@StanislawLorenz:喜んで役立ちます。あなたがスクロールするときに変化するハッシュは、標準的な動作ではありません。そのページにはJavaScriptコードがあります(プラグインなど)。だから、それと戦うのではなく、それを見つけてそれをオフにすることをお勧めします。 –

関連する問題