【问题标题】:Firefox addon SDK inject jqueryFirefox 插件 SDK 注入 jquery
【发布时间】:2014-04-27 20:53:25
【问题描述】:

$(document).ready(...) 中的脚本不起作用,有什么想法吗? 我尝试注入的脚本似乎最终加载了。

这是我的代码:

main.js

pageMod.PageMod({
    include: "*",
    contentScriptWhen: 'start',
    contentScriptFile: data.url('inject.js')
});

注入.js

var script = document.createElement('script');
script.src = "resource://directoryOfMyAddon/data/jquery/jquery-1.11.0.min.js";
document.getElementsByTagName('head')[0].appendChild(script);

test.html

<html>
<head>
</head>
<body>
<div id="helloworld"></div>
<script type="text/javascript">
    $(document).ready(function(){
        $("#helloworld").text("Hello, world!");
    });
</script>
</body>
</html>

谢谢 O=)

【问题讨论】:

    标签: javascript jquery firefox-addon firefox-addon-sdk


    【解决方案1】:

    您可以使用您描述的技术注入 jquery,但取决于您的 page-mod 选项中的 contentScriptWhen 设置您不会看到 .ready(),因为内容脚本将附加只有在loadcontentScriptWhen="end"(默认))或DOMContentLoadedcontentScriptWhen="ready")之后。

    您可以使用contentScriptWhen="start",但此时可能还没有可以将&lt;script&gt; 标记附加到的节点。

    但是,我应该提一下,强烈建议不要(阅读:不会通过 AMO 审查)将 jquery 注入随机页面,因为这可能会干扰页面可能已经加载的 jquery 版本(或其他任何内容)否则将站点分配给$)。

    如果您的所有代码都驻留在您的内容脚本中会更好。

    【讨论】:

    • 见下面的评论 ;)
    【解决方案2】:

    the docs for loading content scriptscontentScriptFile 接受一个数组作为参数,因此您可以附加多个脚本。

    也就是说,出于安全原因,页面脚本(比如你的 hello world)和内容脚本不能共享变量。它可以被规避,但我无法想象为什么在不注入 jQuery 本身的 HTML 页面上会有 jQuery 代码。

    【讨论】:

    • 我正在尝试检测像&lt;script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"&gt;&lt;/script&gt; 这样的网址并将其替换为本地版本。它已注入,但正文中的脚本未正确加载。如果页面上已经存在 jquery,请查看我如何阻止:stackoverflow.com/questions/23189622/…Thanks
    • 内容脚本和页面脚本不能共享变量,因此注入您的 JQuery 版本不会使其可用于页面,只能用于扩展的内容脚本。你为什么要这么做?
    • 好的,谢谢,那么您有关于规避它的可能性的任何文档吗?我想注入最新的本地 jquery 版本,以增强隐私、速度、带宽并减少错误。
    • 查看我的回答here。但是,您需要担心使用已弃用函数的开发人员,可能使用自定义函数编辑其 JQuery 文件源的开发人员(不好的做法,但仍有可能),并且对用户的改进似乎充其量是微不足道的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多