加载 requireJS 和 Backbone 的多个实例

2024-06-24

我正在创建一个 google chrome 扩展,当在选项卡上激活时,它会将一些自定义代码和一些新视图加载到该窗口的文档中。我想使用 requireJS 加载扩展调用的这些新代码模块。但是,我担心如果调用此扩展的应用程序/网站已经在运行 requireJS,则可能会发生冲突或名称冲突,并且我从头开始调用它会擦除网站本机 require.config 或以其他方式导致一些未知的恶作剧。这会导致每次我的扩展在其上激活时该网站都会崩溃。

那么有没有一种方法可以将 requireJS 和backboneJS 的全新且“独立”的实例加载到可能已经运行自己的实例的站点上?如果没有,有没有办法使我的要求和配置与目标应用程序的要求和配置相一致?

编辑更多细节:好的,我的扩展有更多细节:我正在页面上创建一个 iFrame,它有一个完全独特的文档空间。但我仍然需要 iFrame 了解原始文档中发生的某些事情(例如:当用户单击该文档中的某个 div 时,我希望将此事件传递给 iFrame)。为此,我通过原始文档的内容脚本传递各种对象,直到扩展,返回到 iframe 的内容脚本,最后(使用 window.onMessage)传递到 iFrame 的 javascript 环境。我开发的过程与所描述的过程大致相似here http://www.sitepoint.com/chrome-extensions-bridging-the-gap-between-layers/。是的,这让我很头疼。

不管怎样,最重要的是我在 iframe、扩展和原始源文档中进行了大量代码。因此,我希望在每个上下文中都有一个 require 实例。


内容脚本在与页面上下文隔离的上下文中运行 https://developer.chrome.com/extensions/content_scripts.html#execution-environment。 IE。如果页面声明了一个全局变量Backbone,您的内容脚本无法直接读取或访问它。

将以下代码(刚刚编写)放入您的 Chrome 扩展程序中(将其放在require.js),您将能够在内容脚本中使用 RequireJS。

require.load = function(context, moduleName, url) {
    url = chrome.extension.getURL(url);
    var x = new XMLHttpRequest();
    // Append Math.random()... to bust the cache
    x.open('GET', url + '?' + Math.random().toString(36).slice(-4));
    x.onload = function() {
        var code = x.responseText;
        x += '\n//@ sourceURL=' + url; // Optional, for debugging.
        window.eval(code);
        context.completeLoad(moduleName);
    };
    x.onerror = function() {
        // Log error if you wish. This is usually not needed, because
        // Chrome's developer tools does already log "404 Not found"
        // errors for scripts to the console.
    };
    x.send();
};

在开发过程中,这种方法非常理想,因为行号将与代码中的行相匹配。

在生产中,我建议使用r.js https://github.com/jrburke/r.js/连接(并缩小)你的代码,因为输出将是一个大的 JavaScript 文件。 Chrome 扩展程序中的资源通常会在几毫秒内加载,但如果您有相当多的模块,这些毫秒加起来就会很重要。每个请求都在给定选项卡的开发人员工具的“网络”选项卡中可见,这只是噪音,并且对于使用您的扩展的 Web 开发人员来说是不希望有的副作用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

加载 requireJS 和 Backbone 的多个实例 的相关文章

  • 在一个命令中选择或插入一行

    我使用的是 PostgreSQL 9 0 我有一个表 其中只有一个人工键 自动递增序列 和另一个唯一键 是的 这个表是有原因的 我想通过另一个键查找 ID 或者如果它不存在 则插入它 SELECT id FROM mytable WHERE
  • 如何限制单元测试的最大运行时间?

    我目前正在运行一些单元测试 这些测试可能需要很长时间才能失败或无限期地运行 在成功的测试运行中 它们总是会在一定的时间内完成 是否可以创建一个 pytest 单元测试 如果在一定时间内未完成 该测试就会失败 您可以安装 pytest tim
  • Mac 无法安装 Tensorflow

    我检查了我的 pip3 和 python3 版本 tensorflow MacBook Pro de Hector 2 tensorflow hectoresteban pip3 V pip 10 0 1 from Users hector
  • 将我的应用程序添加到“添加快捷方式”列表,以便在主屏幕上有快捷方式

    如您所知 当您长按主屏幕时 手机会显示列表菜单 您可以添加快捷方式 小部件 文件夹等 我希望我的应用程序位于快捷方式列表中 我怎样才能做到这一点 快捷方式自 API 级别 1 起就已存在 并且也可由 3rd 方应用程序使用 要将活动添加到快
  • Ruby on Rails Active Record RANDOM() 在循环内始终相同

    当每次循环迭代应该抓取随机记录时 为什么会重复输出相同的记录 ID count 0 while count lt 20 puts ID SomeModel where assoc id 10 order RANDOM limit 1 fir
  • Ionic 3 Deeplinking - 从 URL 启动应用程序

    我正在使用 Ionic 开发一个跨平台应用程序 当尝试实现深度链接时 我安装了一个名为 Ionic Native 插件深层链接 我运行了这些命令 ionic cordova plugin add ionic plugin deeplinks
  • Tomcat 中 JNDI 的 Java Mail API 配置文档

    我花了几天时间弄清楚如何通过 JNDI 在 Tomcat 中配置 javax mail Session有认证 现在我明白了 但只是在深入研究代码之后 这次我看到了有史以来最糟糕的代码 javax mail Service connect S
  • 不允许在 MS Access 中创建或更改记录

    我已经阅读了有关上述问题的大量帖子 但没有一个答案能够解决问题 我的问题是两个表使用 ID 字段 也是主键 相互链接 以一对一的关系 当我尝试在主表中输入记录时 不知道 Access 是否知道这是主表 出现以下错误 You cannot a
  • JFrame.repaint() 和 JPanel.repaint() 之间的区别

    谁能解释一下两者之间的区别JPanel repaint 方法和JFrame repaint 方法 我想两者都调用paintComponent JPanel 中的方法 请澄清 谢谢 Calling repaint 在任何组件上都会向重绘管理器
  • 获取 Flask 中没有端口的请求主机名

    我刚刚设法使用 Flask 获取我的应用程序服务器主机名request host and request url root 但这两个字段都返回请求主机名及其端口 我想使用仅返回请求主机名的字段 方法 而无需进行字符串替换 如果有 没有 We
  • 使用捕获信号和噪声的 PSD 计算 SNR

    I have captured both a transmitted signal and when there is no transmission i e noise only I would like to calculate the
  • CSS 链接图像带有下划线(“a”显示设置为阻止)

    我有一个菜单 我希望每个单独的项目中文本周围的所有空间都能将用户带到指定的页面 我在网上查了一下 发现最好的解决方案是将 a 显示设置为阻止 如下 a display block height 100 text decoration und
  • 让 MSBuild 将文件输出到日志?

    我有一个输出到文件的程序 我正在从 MSBuild 项目运行它 我希望将此输出写入 StdOut 以便我们的构建代理 TeamCity 可以获取它 如何让 MSBuild 将文件内容转储到输出 DOS命令type http www comp
  • 从 google play 中提取统计信息

    我正在建立一些统计数据 并希望获得来自 google play 应用程序商店 的统计数据 最受欢迎 下载量 价格等信息 有谁知道是否有这个 API 或者我必须自己抓取它 有一个名为 android market api 的项目http co
  • PHP SFTP 简单文件上传

    我正在使用 phpseclib SFTP 类 并尝试上传这样的文件 sftp new Net SFTP mydomain com if sftp gt login user password exit Login Failed sftp g
  • java中的“main”可以返回字符串吗?

    java中的public static void main String args 是否有可能返回String代替void 如果是 怎么办 public static String main String args 代替 public st
  • jQuery、$(element).click 在 ie<9 上不起作用

    我有一个像这样的 jQuery 点击事件 document ready function id secteur activite click function console log ok 在 firefox 和 ie9 上 当我单击我的元
  • Json.net 将数字属性序列化为字符串

    我正在使用 JsonConvert SerializeObject 序列化模型对象 服务器期望所有字段都是字符串 我的模型对象具有数字属性和字符串属性 我无法向模型对象添加属性 有没有办法将所有属性值序列化为字符串 我必须只支持序列化 而不
  • 如何将 Three.js 代码实施到 Android 移动应用程序中?

    我用 HTML CSS 和 JS 编写了 Three js 场景的代码 显示 3D 头部模型及其上的标记 它适用于我的 Angular 项目 我还可以通过将 HTML 代码添加到 Web 视图中 使其在适用于 Android 和 iOS 的
  • 在 Azure Active Directory (AAD) 中注册微服务以确保安全

    我在服务结构集群中部署了一个服务结构应用程序 无状态和有状态 我正在尝试在应用程序中实现安全性 应用程序使用 Active Directory 身份验证库 ADAL 通过 OAuth 2 0 客户端凭据流从 Azure AD 获取令牌 其中

随机推荐