捆绑的 Webextension 没有看到 JQuery
Bundled Webextension doesn't see JQuery
我正在为 Chrome 创建一个网络扩展,以下代码会导致错误:
$(function () {
$('[data-toggle="popover"]').popover();
// ...
});
Chrome 抱怨:
Uncaught TypeError: jquery_1.default(...).popover is not a function
看起来 bootstrap 根本不可用。我知道脚本的导入顺序很重要:Chrome extension "$ is not defined" error
所以我确保 bootstrap 包含在我的代码之前:
"content_scripts": [
{
"js": [
"assets/jquery/dist/jquery.min.js",
"assets/popper.js/dist/popper.min.js",
"assets/bootstrap/dist/js/bootstrap.min.js",
"content/index.js"
],
"css": [
"assets/css/extra.css",
"assets/bootstrap/dist/css/bootstrap.min.css"
]
}
],
这些脚本路径有效。
编辑:
对不起,我搞砸了这个错误的文档。
显然,它只发生在我使用打包器时,例如 parcel。
我只用 parcel 测试过,但我相信任何捆绑管理器都会出现这个问题,例如 webpack 或 browserify。
我在使用 Bootstrap 4 时遇到了同样的问题,它在 Bootstrap v.3.3.7 上工作正常,但我无法让它工作,但最终我做到了。这就是我所做的:
CDN 订单:
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
示例函数:
$(function () {
$('[data-toggle="popover"]').popover()
})
示例HTML:
<a href="#" title="Header" data-toggle="popover" data-placement="bottom" data-content="Content">Bottom</a>
可能值得确保您拥有 Bootstrap/jQuery/Popper 等的所有最新版本,并将它们按与上面相同的顺序放置:
bootstrap.css
jquery-3.3.1-slim.min.js
popper.js
bootstrap.min.js
希望这有帮助 - 如果没有帮助请告诉我
当使用打包器处理依赖项时,例如 parcel,jQuery 在具有 CommonJS 模块的环境中执行。
在这样的设置中,jQuery 不会将自己添加到全局 window
对象中。但是,bootstrap 需要 $
函数,jQuery
需要 window
。
解决方法是手动添加,以下是typescript代码。在 JS 中你不需要强制转换为 any
import $ from "jquery";
(<any>window).jQuery=$;
(<any>window).$=$;
import "bootstrap";
我正在为 Chrome 创建一个网络扩展,以下代码会导致错误:
$(function () {
$('[data-toggle="popover"]').popover();
// ...
});
Chrome 抱怨:
Uncaught TypeError: jquery_1.default(...).popover is not a function
看起来 bootstrap 根本不可用。我知道脚本的导入顺序很重要:Chrome extension "$ is not defined" error
所以我确保 bootstrap 包含在我的代码之前:
"content_scripts": [
{
"js": [
"assets/jquery/dist/jquery.min.js",
"assets/popper.js/dist/popper.min.js",
"assets/bootstrap/dist/js/bootstrap.min.js",
"content/index.js"
],
"css": [
"assets/css/extra.css",
"assets/bootstrap/dist/css/bootstrap.min.css"
]
}
],
这些脚本路径有效。
编辑:
对不起,我搞砸了这个错误的文档。 显然,它只发生在我使用打包器时,例如 parcel。 我只用 parcel 测试过,但我相信任何捆绑管理器都会出现这个问题,例如 webpack 或 browserify。
我在使用 Bootstrap 4 时遇到了同样的问题,它在 Bootstrap v.3.3.7 上工作正常,但我无法让它工作,但最终我做到了。这就是我所做的:
CDN 订单:
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
示例函数:
$(function () {
$('[data-toggle="popover"]').popover()
})
示例HTML:
<a href="#" title="Header" data-toggle="popover" data-placement="bottom" data-content="Content">Bottom</a>
可能值得确保您拥有 Bootstrap/jQuery/Popper 等的所有最新版本,并将它们按与上面相同的顺序放置:
bootstrap.css
jquery-3.3.1-slim.min.js
popper.js
bootstrap.min.js
希望这有帮助 - 如果没有帮助请告诉我
当使用打包器处理依赖项时,例如 parcel,jQuery 在具有 CommonJS 模块的环境中执行。
在这样的设置中,jQuery 不会将自己添加到全局 window
对象中。但是,bootstrap 需要 $
函数,jQuery
需要 window
。
解决方法是手动添加,以下是typescript代码。在 JS 中你不需要强制转换为 any
import $ from "jquery";
(<any>window).jQuery=$;
(<any>window).$=$;
import "bootstrap";