3

ユーザーがカスタムボタンを使いやすくするスクリプトを作成しようとしていますが、次のようなものがあります

<script src="http://host.com/file.js?id=12345"></script>

私が疑問に思っているのは、そのパラメーターfile.jsを取得する方法です。id

を使用するdocumentと、スクリプト行を含む元の html ページが取得され、必要なのはそれidです。

そのIDを正常に取得する方法はありますか? 範囲はどうあるべきですか?


追加した

アイデアは、たとえば、小さくて単純なリストを作成するために、ページにいくつかのボタンを配置できるということです。

<ul>
    <li><script src="http://host.com/file.js?id=12345"></script></li>
    <li><script src="http://host.com/file.js?id=23456"></script></li>
    <li><script src="http://host.com/file.js?id=34567"></script></li>
</ul>

これは最終的に次のように変換されます

<ul>
    <li><a class="view40btn" href="#" data-id="12345"><strong>V40</strong> Watch the video</a></li>
    <li><a class="view40btn" href="#" data-id="23456"><strong>V40</strong> Watch the video</a></li>
    <li><a class="view40btn" href="#" data-id="34567"><strong>V40</strong> Watch the video</a></li>
</ul>

上記のリストは、HTML では次のようになります。

ここに画像の説明を入力

私の唯一の問題は、data-idこれが で生成されるため、属性に正しい ID を割り当てることができないことfile.jsです。


結果

Paulproの回答から、私は彼のアイデアで作業し、クライアントにははるかに多くのスクリプトがロードされ、いくつかのスクリプトがロードされることを知っていidました。最終的な作業バージョン用に少し変更しました:

var id = (function(){
    var scripts = document.getElementsByTagName('script');
    for(var i = 0, result = {}; i < scripts.length; i++)
        if(scripts[i].hasAttribute('data-viewfileid'))
            result['id'] = decodeURIComponent(scripts[i].getAttribute('data-viewfileid'));
    return result['id'];
})();

var html = '<a class="view40btn" href="#" data-id="' + id + '"><strong>V40</strong> Watch the video</a>';
document.write(html);

ユーザーのスクリプトは次のようになります。

<script data-viewfileid="4444" src="file.js" type="text/javascript"></script>
4

6 に答える 6

1

もう 1 つの解決策は、php インタープリターで .js ファイルを解析することです。たとえば、Apache 構成では次のようになります。

AddType application/x-httpd-php .js

そしてJSで:

alert('<?=$_GET["id"]?>');
于 2013-06-24T18:40:17.727 に答える
0

Javascript コードは、それが何らかのファイルの一部であることを「認識」しません。JS ファイルは「実行可能」ではありません。ファイルのロード後に実行する必要がある main メソッドはありません。GET パラメータを渡すことはできません。どのように解釈すべきか明確ではありません。

HTML ページでは、「onload」メソッドをリッスンしてから、パラメータを使用してファイルから関数を呼び出す必要があります。

于 2013-06-24T18:35:50.213 に答える