即使我在代码实际完成之前在控制台中执行 window.functionName ,我也尝试过延迟代码,我仍然得到相同的结果(当我直接进入window.functionName控制台时有效,但在从 javascript 代码执行时无效)。
请注意,这一切都发生在 chrome 扩展的内容脚本中。
对于完整的上下文,我有一个 Vue 组件,它有一个调用另一个 javascript 文件中的函数的方法,该文件最终调用 window.functionName - 所以像这样:
SomeVueComponent.vue
<template>
<button @click="buttonClicked">
</template>
<script>
import { doSomething } from 'do-something.js';
export default {
...
methods: {
buttonClicked() {
doSomething();
}
}
}
</script>
做某事.js
export function doSomething() {
doFunctionName() {
window.functionName(); // Returns "Uncaught ReferenceError: functionName is not defined"
}
...
whenElementIsShown() {
// When the element was shown a script was injected to the page that sets window.functionName
// to something. I tried putting doFunctionName in a timeout and got the same results.
doFunctionName();
}
}
而在开发人员工具控制台中......
window.functionName() // Returns "f (){...}"
我只是不确定为什么window在这两种情况下会有所不同。是因为 Vue 吗?这是一些范围问题吗?有没有办法获得最新的更新window?