Я пытаюсь создать расширение Chrome с помощью TypeScript.
Установка довольно проста:Несоответствие анонимного define() в скрипте расширения расширения Chrome
В manifest.json
{
"permissions": [
"webRequest",
"webRequestBlocking",
"tabs",
"storage",
"http://*/",
"https://*/*"
],
"content_scripts": [
{
"matches": [ "http://*/*", "https://*/*" ],
"js": [ "scripts/require.js", "scripts/require-cs.js",
"scripts/main.js", "scripts/contentscript.js" ],
"run_at": "document_end",
"all_frames": true
}],
}
В :
export class WebPage
{
private id: number;
private processed: boolean;
get Id() { return this.id; }
set Id(value: number) { this.id = value };
get Processed() { return this.processed; }
set Processed(value: boolean) { this.processed = value };
constructor(id: number)
{
this.id = id;
this.processed = false;
}
}
При компиляции в результате JavaScript начинается с:
define(["require", "exports"], function (require, exports) {
var WebPage = (function()
{
//Code omitted to keep the SO question short
}});
В main.ts
:
(function()
{
console.log("Executing main.js");
requirejs.config(
{
baseUrl: "scripts", paths: { "model" : "model" }
});
})();
В contentscript.ts
:
import model = require("model");
console.log("Processing page");
var page = new model.WebPage(1);
page.Processed = true;
console.log("Done processing page");
При компиляции в результате JavaScript выглядит следующим образом:
define(["require", "exports", "model"], function (require, exports, model) {
console.log("Processing page");
var page = new model.WebPage(1);
page.Processed = true;
console.log("Done processing page");
});
И, наконец, в require-cs.js
:
console.log("Executing requirejs-cs.js");
require.load = function (context, moduleName, url) {
console.log("require.load called");
var xhr = new XMLHttpRequest();
xhr.open("GET", chrome.extension.getURL(url) + '?r=' + (new Date()).getTime(), true);
xhr.onreadystatechange = function (e) {
if (xhr.readyState === 4 && xhr.status === 200) {
console.log("evaluating" + url)
eval(xhr.responseText);
context.completeLoad(moduleName);
}
};
xhr.send(null);
};
Это то, что я нашел во всех других вопросах, связанных с моей проблемой.
Все это приводит к следующему выходу при загрузке страницы:
Uncaught Error: Mismatched anonymous define() module: function (require, exports, model) {
console.log("Processing page");
var page = new model.WebPage(1);
page.Processed = true;
console.log("Done processing page");
}
http://requirejs.org/docs/errors.html#mismatch
Я читал эти документы, я прошел через много подобных вопросов на SO,
, но я не нашел все, что работает для меня еще.
Большинство вопросов касаются JavaScript,
Возможно, что-то не хватает на стороне TypeScript?
Примечание. Компилятор TypeScript настроен на использование AMD.
Это действительно решает мою проблему для скриптов содержания, которые определены в манифесте, спасибо. Я посмотрел документы, но просто не щелкнул. Кажется, что это не работает для сценариев контента, выполненных с фоновой страницы, но это, возможно, для другого вопроса. – TimothyP