【发布时间】:2021-08-04 12:02:36
【问题描述】:
我有这个用于 django 频道的 js 片段:
var chatSocketSender1 = new WebSocket(
'ws://' + window.location.host + '/ws/my_socket1/'
)
function send() {
var msg = "some message"
var receiver_id = 111
window['chatSocketSender1'].send( JSON.stringify({
'msg': msg,
'receiver_id': receiver_id
}) )
}
document.querySelector('#send_button').onclick = function() {
send();
}
问题是这个 js 代码只有在我把它放在 HTML 的最新元素之后才有效:
<head>
...
</head>
<body>
// whole html content here
<script>
// js piece here
</script>
</body>
但如果我使用 jquery 的加载方法,例如:
<head>
<script>
$(window).on('load', function () {
// js piece here
});
</script>
</head>
<body>
// whole html content here
</body>
然后它给出:Uncaught TypeError: window[("chatSocketSender1")] is undefined
请给点建议,为什么这不适用于“onload”?
【问题讨论】:
-
load仅表示“在所有脚本下载后运行”。你还是要考虑执行的顺序。 -
@EmielZuurbier - 所以
load中的 js 代码和 HTML 末尾的 js 代码不完全相同?我以为他们是等价的。没有? -
@OtoShavadze 它们是等价的,只有一个在
window(全局)级别,另一个在回调范围内。所以你的var xxx不能被引用为window.xxx,因为它不是一个全局变量。
标签: javascript jquery sockets