0

現在、リクエストをレンダリングするヘッドレス ブラウザとしてSplash HTTP APIを使用しています。 ページの読み込みが完了した後、ページがレンダリングされる前に、ページ コンテキスト内でカスタム Javascript コードを評価できるエンドポイントrender.html を js_sourceと共に使用しています。

ページの読み込み後にjQueryを読み込むなど、外部リソースに追加のリクエストを行う必要があります。

var script = document.createElement('script');
script.type = 'text/javascript';
script.src = "https://code.jquery.com/jquery-1.5.1.min.js";
document.getElementsByTagName('head')[0].appendChild(script);

問題は、そのようにすることによって、オブジェクトがページ コンテキスト内で使用可能にならないことです。スクリプトは、レンダリングされた最終的な HTML ソースの HEAD 要素内に追加されているように見えます。

<script type="text/javascript" src="https://code.jquery.com/jquery-1.5.1.min.js"></script>

以下で説明する両方のメソッドを使用してコールバックを設定して、jQueryのメソッドにアクセスする前にスクリプトが読み込まれるようにしました。ただし、コールバックは両方のシナリオで呼び出されません。

script.onreadystatechange = callback;
script.onload = callback;

前述のスクリプトをChromeのコンソールで実行すると、必要な処理が実行され、すぐに jQuery リソースがページ コンテキスト内で使用できるようになります。

4

3 に答える 3

0

おそらく で動作させることができますがjs_source、機能としてjs_sourceはかなり制限されています。/executeエンドポイントとカスタム Lua スクリプトは、はるかに用途が広く、使いやすいことがよくあります。

function main(splash)
    splash:autoload("https://code.jquery.com/jquery-1.5.1.min.js")
    assert(splash:go(splash.args.url))
    assert(splash:wait(1.0))
    splash:runjs(splash.args.js_source)
    return splash:html()
end

^^ このスクリプトは render.html エンドポイントをエミュレートしますが、jQuery をプリロードします。「url」および「js_source」引数をサポートし、「wait」を 1.0 にハードコードします。

于 2016-12-06T20:07:46.873 に答える