【问题标题】:Chrome extension not loading injected scripts with "charset" in MIME typeChrome 扩展程序未在 MIME 类型中加载带有“字符集”的注入脚本
【发布时间】:2013-08-03 03:20:09
【问题描述】:

我一直在尝试找出为什么我的 Chrome 扩展程序(未打包)中的注入内容脚本无法使用 MIME 类型中的 charset 参数加载(使用 Chrome 28.0.1500.95 stable 测试):

var head = document.head || document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.src = chrome.extension.getURL("myscript.js");
script.type = 'application/ecmascript;charset=UTF-8';
script.async = false;
script.onload = function () { this.parentNode.removeChild(this); };
head.appendChild(script);

删除代码的;charset=UTF-8 部分后,脚本将正常加载。但是,当包含该部分时(似乎是一个有效的 MIME 类型参数),脚本被加载到 DOM,但从未执行。有谁知道为什么会这样?请注意,包含的文件使用 UTF-8 编码(无 BOM,使用十六进制编辑器检查)。

编辑:澄清一下,我想知道为什么 charset 参数似乎在 Chrome 中不起作用。

【问题讨论】:

    标签: javascript google-chrome character-encoding google-chrome-extension mime-types


    【解决方案1】:

    我认为这不是您指定charset 的方式。 IE。虽然它可能是对type 的有效补充,但浏览器可能只会自动运行text/javascriptapplication/ecmascript。我不知道,但试试这个;

    script.type = 'application/ecmascript';
    script.charset = 'UTF-8';
    

    【讨论】:

    • 好吧,如果它不起作用(您尝试过吗?)尝试根本不指定类型,因为正如您的链接所述,它无论如何都会恢复为“text/javascript”
    • 不省略charset,省略type。我以为你想指定 charset 并让它继续运行。好奇,你测试过火狐吗?可能只是 chrome
    【解决方案2】:

    事实证明,这是基于对规范的误解。当规范要求不包含字符集时,意味着您不能包含;charset=abc 位,而不是不能指定 HTML 字符集属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多