在 Chrome 扩展内容脚本中包含 Javascript 文件

发布于 2024-09-25 21:22:19 字数 373 浏览 4 评论 0原文

我正在编写一个 Chrome 扩展程序,并且想要编写一个 JS 文件,该文件提供了另一个文件中不存在的几个预期功能,然后加载另一个文件。当传递当前模块的局部变量和全局变量时,我追求类似于 Perl 中的 require、C 中的 #include 或 Python 中的 execfile 的行为,就像引用的文件直接插入到当前脚本中一样。

我可以找到的大多数现有解决方案都涉及将这些“包含”嵌入脚本标签内,但我不确定这是否适用(如果适用,请解释我的扩展程序在当前页面中注入所有这些脚本标签的确切位置)。

Update0

请注意,我正在编写内容脚本。至少在“用户”方面,我不提供原始的 HTML 文档。

I'm writing a Chrome extension, and want to write one JS file, that provides several expected functions that aren't present in another, then load that other file. I'm after behavior similar to require in Perl, #include in C, or execfile in Python when passing the current modules locals and globals, as though the referenced file was inserted directly into the current script.

Most existing solutions I can find out there refer to embeddeding these "includes" inside script tags, but I'm not sure this applies (and if it does, an explanation of where exactly my extension is injecting all these script tags in the current page).

Update0

Note that I'm writing a content script. At least on the "user" side, I don't provide the original HTML document.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

为你鎻心 2024-10-02 21:22:19

最好的解决方案是特定于 Chrome 的。 javascript 文件按照在扩展程序的 manifest.json< 中加载的顺序列出/code>,以下是相关字段的摘录:

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

javascript 文件按照给定的顺序有效连接,然后执行。

Well the best solution was Chrome-specific. The javascript files are listed in the order they are loaded in the extension's manifest.json, here's an extract of the relevant field:

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

The javascript files are effectively concatenated in the order given and then executed.

同尘 2024-10-02 21:22:19
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); 

我们在我们的组织中使用它来做到这一点。似乎工作得很好。

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); 

We use this at our organization to do this. Seems to work well enough.

○闲身 2024-10-02 21:22:19

你尝试过吗:

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

或者(我不确定是哪一个......但我记得其中一个有效)

document.write('<script type="text/javascript" src="otherfile.js"></script>');

Did you try :

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

or (I'm not sure which... but I recall one of them working)

document.write('<script type="text/javascript" src="otherfile.js"></script>');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文