5

したがって、基本的にはjQuery postを使用して外部phpページへのajax呼び出しを行い、結果をエコーアウトして実際のページに表示します。

問題は、外部の php ページが何らかの JavaScript を返すたびに、実際のページに表示されないことです。

Javascript が返される

<script type="text/javascript">z_media = "SQgeKL07Nr"; z_autoplay=false; z_width=899; z_height=506;</script><script type="text/javascript" src="http://www.zunux.com/static/js/embed.js"></script>

私のjQuery

function videoGrabber(mirror_id, video_version, firstVideo_version, videoNumber) {


        jQuery.post("/path/to/my/external/php/file.php", {firstParam : mirror_id, secondParam : video_version, thirdParam : firstVideo_version}, function(data) {
            //this is your response data from serv
        console.log(data);
        jQuery('#videoContainer').html(data);

    });
        return false;
}

一般に、iframe が返されるときは、#videoContainerID に問題なく表示されますが、その JavaScript 埋め込みコードが返されるときはいつでも、#videoContainerID に何も表示されません。しかし、コンソールで確認できるので、外部の php ページがデータを返していることは確実に確認できます。それで、どうすればこれを修正できますか?

4

3 に答える 3

1

を追加して、eval()取得している Javascript コードを実際に実行してみてください。

function videoGrabber(mirror_id, video_version, firstVideo_version, videoNumber) {
    jQuery.post("/path/to/my/external/php/file.php", {firstParam : mirror_id, secondParam : video_version, thirdParam : firstVideo_version}, function(data) {
        //this is your response data from serv
        console.log(data);
        jQuery('#videoContainer').html(data);
        eval(data);
    });
    return false;
}

ところで、セキュリティが十分であることを確認してください。eval()誰かが ajax 呼び出しを傍受して独自のコードを挿入できる場合、騒乱の可能性がたくさんあります。

ああ、eval()Javascript コードだけを評価しようとしているので、リターン コードをそのままの JS コード (<script>タグなし)に変更する必要があります。

z_media = "SQgeKL07Nr"; z_autoplay=false; z_width=899; z_height=506;

対処する唯一の他のことはこれです:

<script type="text/javascript" src="http://www.zunux.com/static/js/embed.js"></script>

そのスクリプトを呼び出しページ (ajax コードを含むページ) に含めて、ajax 経由で取得したコードからトリガーできますか? したがって、あなたの ajax コードは最終的に次のようなものを返します。

z_media = "SQgeKL07Nr"; z_autoplay=false; z_width=899; z_height=506; triggerEmbedScript();
于 2013-08-30T03:03:02.373 に答える
0

セキュリティ上の理由から、javascript の外部でリクエストしてからやみくもに実行することは避けevalます。私があなたなら、これらの変数を JSON オブジェクトで返します。追加のスクリプトについては、既にロード済みで、必要なときに呼び出すだけです。

iframe を返すことと、それらがどのように適切に機能するかについて言及しています。あなたの php ファイルが任意の HTML を返して、あなたの に直接挿入できるということ#videoContainerですか? 私もそれを避けます。AJAX 要求によって返されたデータは、未知の領域であるインターネットを通過したところです。より良い構造は、MITM 攻撃や XSS を防ぐのに役立ちます。

于 2013-08-30T03:13:31.430 に答える
0

上記のコメントで述べたように、返された JS コードは実際には何もしません。いくつかの (グローバル) 変数を定義するだけです。表示される可能性のある目に見えるコンテンツはなく#videocontainer、JS は何らかの動作をトリガーする可能性のある関数を呼び出していません。

そうは言っても、AJAX 呼び出しから取得した JS を読み込んで実行する場合は、scriptタグ全体にコンテンツを追加するのではなく、次のことをお勧めします。

var script = document.createElement("script");
script.type = "text/javascript";
script.text  = data;
document.body.appendChild(script);

もちろん、これは、AJAX 呼び出しから取得したデータをこの文字列 (タグなし) に変更できる場合にのみ機能します。

'z_media = "SQgeKL07Nr"; z_autoplay=false; z_width=899; z_height=506;'

全体として、コードは次のようになります。

function videoGrabber(mirror_id, video_version, firstVideo_version, videoNumber) {
    jQuery.post("/path/to/my/external/php/file.php", {firstParam : mirror_id, secondParam : video_version, thirdParam : firstVideo_version}, function(data) {
        var script = document.createElement("script");
        script.type = "text/javascript";
        script.text  = data;
        document.body.appendChild(script);
    });
    return false;
}
于 2013-08-30T03:59:30.887 に答える