2017-11-09 12 views
1

私はさまざまなことを学ぶためにudemy.comを使用しており、videojs HTML5プレーヤーを使用しています。巻き戻しのデフォルト値を5秒から15秒に変更しました。私の意見では、しばしば私はしばしば1つの言葉や出来事が理解できず、3秒後に帰りたいと思っているからです。 私の質問は:ブラウザーやTampermonkeyのような変数を変更することが可能なのですか?矢印を左向きまたは右向きにすると、3秒で15分だけ前後に移動するようになります。ブラウザでJavascriptファイルの変数を変更することはできますか?

2782: function (t, e, n) { 
    "use strict"; 

    function o(t, e, n) { 
     return t.preventDefault(), t.shiftKey && e.speedDown ? (e.speedDown(), "speeddown") : e.seekBackward ? (e.seekBackward(n.seekStep), "rewind") : void 0 
    } 

    function i(t, e, n) { 
     return t.preventDefault(), t.shiftKey && e.speedUp ? (e.speedUp(), "speedup") : e.seekForward ? (e.seekForward(n.seekStep), "forward") : void 0 
    } 

変数「seekStepは」ここで設定されています:私は、巻き戻しや今後のためにsource codeでこれらのメソッドを見つけ

var f = (n(2549), { 
      volumeStep: .1, 
      seekStep: 15, 
      enableMute: !0, 
      enableFullscreen: !0, 
      enableNumbers: !0 
     }), 

は、残念ながら私はJavaScriptで絶対的な初心者ですので、それはのために懸命に本当にです私は方法で正確に何が起こっているのか理解する。私はすでにそれが可能であるかどうかを調べるためにすでにかなり研究していましたが、大文字と小文字が異なる場合があるので、良い解決策や決定的な回答は実際には見つかりませんでした。事前に

おかげで、 アンディ

編集:私はすでにChromeとFirefoxのの開発者向けツールを試みたが、単に3に変数を設定するには、動作していないとTampermonkeyで私が上で動作アラートを作成することができますudemy.comのメインサイトではなく、動画プレーヤーサイトにはありません。それはすでに問題です...

+0

ブラウザのコンソールに移動し、上記の 'f'の定義を貼り付けるだけで、seekStepを変更して実行することができます。私はその 'n'関数が何をしているのかわかりませんが、それを提供することは何らかの奇妙な副作用を起こさず、うまくいくはずです。 – Carcigenicate

+0

がグローバルであるかどうかによって異なります – epascarello

+0

'seekBackward'関数を上書きできますか? 'f'も上書きすることができますが、この関数名はおそらく頻繁に変更されます) –

答えて

0

スクリプトテキストをフェッチし、値を置き換え、ページソースをフェッチし、元のスクリプトリンクをパッチしたバージョンに置き換え、document.writeを介して現在のページを書き換えます。

オプションで、パッチを適用したスクリプトをlocalStorageに保存します(Tampermonkeyがスクリプトの横にそれらを挿入するので、GM_getValueよりも優れていると思います)。

// ==UserScript== 
// @name   patch seekStep 
// @match   https://www.udemy.com/* 
// @run-at  document-start 
// ==/UserScript== 

window.stop(); 

const SCRIPT_URL = 'https://www.udemy.com/staticx/udemy/js/webpack/' + 
    'videojs-open-source-package.8c14010d78dd1966a713.js'; 

Promise.all([ 
    fetch(location.href, {credentials: 'include'}).then(r => r.text()), 
    localStorage.patchedScript || 
    fetch(SCRIPT_URL, {credentials: 'include'}).then(r => r.text()).then(text => { 
     text = text.replace(/(seekStep):\d+/, '$1:3'); 
     localStorage.patchedScript = text; 
     return text; 
    }), 
]).then(([html, script]) => { 
    document.open(); 
    html = html.replace(
    /<script[^>]*?src=["'][^"'>]*?videojs-open-source-package[^>]+>[\s\S]*?<\/script>/, 
    `<script>${script}</script>`); 
    document.write(html); 
    document.close(); 
}); 

私はそれが大規模で複雑なページのソースに高速ですので、正規表現を使用してスクリプト参照を置き換えますが、必要であれば適切なDOMParserメソッドを使用すること自由に感じています。

コードに記載されているサイト全体ではなく、@matchに実際のURLパターンを指定することを忘れないでください。

+0

ありがとうございました!しかし、どういうわけか、スクリプトがアクティブでログインできないときは、いつもログアウトしています。ロードアニメーションが表示されますが、ログインできません。それがなぜそのような考えですか?今のところ、私はビデオプレーヤーに行っていないので、それが動作するかどうかはわかりません。 – andi90

+0

その理由を調査するためにアカウントを作成する必要がありますが、それは別の問題です。 – wOxxOm

+0

さて、大丈夫、とにかくおかずに感謝! – andi90

関連する問題