18

私は Chrome 拡張機能を作成しており、別のファイルには存在しないいくつかの期待される機能を提供する 1 つの JS ファイルを作成し、その他のファイルをロードしたいと考えています。require現在のモジュールのローカルとグローバルを渡すとき、 Perl、#includeC、またはPythonと同様の動作を求めexecfileています。参照ファイルが現在のスクリプトに直接挿入されたかのように。

私が見つけることができるほとんどの既存のソリューションは、これらの「インクルード」をスクリプトタグ内に埋め込むことを参照していますが、これが適用されるかどうかはわかりません(もしそうであれば、私の拡張機能が現在のページでこれらすべてのスクリプトタグを挿入している正確な場所の説明)。

Update0

私はコンテンツスクリプトを書いていることに注意してください。少なくとも「ユーザー」側では、元の HTML ドキュメントは提供しません。

4

3 に答える 3

23

最良の解決策は、Chrome 固有のものでした。JavaScript ファイルは、拡張機能にロードされた順序でリストされています。関連するフィールドmanifest.jsonの抜粋を以下に示します。

{
  "content_scripts": [
    {
      "js" : ["contentscript.js", "254195.user.js"]
    }
  ]
}

JavaScript ファイルは、指定された順序で効果的に連結されてから実行されます。

于 2010-10-05T05:34:47.733 に答える
-1
function load_script (url, cache) 
{ 

    var httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); 
    httpRequest.open('GET', url, false); 

    if(!cache)
    {
        httpRequest.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
    }

    httpRequest.send(null);
    eval(httpRequest.responseText); 

    var s = httpRequest.responseText.split(/\n/); 
    var r = /^function\s*([a-z_]+)/i; 

    for (var i = 0; i < s.length; i++) 
    { 
        var m = r.exec(s[i]); 
        if (m != null) 
        {
            window[m[1]] = eval(m[1]); 
        }
    }
}

load_script("/script.js",true); 

これを行うために、組織でこれを使用します。十分に機能しているようです。

于 2010-09-28T14:22:04.443 に答える
-2

試しましたか :

<script language="javascript" src="otherfile.js">

または(どちらかはわかりません...しかし、そのうちの1つが機能していたことを思い出します)

document.write('<script type="text/javascript" src="otherfile.js"></script>');
于 2010-09-28T14:22:12.560 に答える