0

即使我在代码实际完成之前在控制台中执行 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

4

1 回答 1

0

原来 chrome 扩展中的 window 变量与页面的 window 变量不同。更多信息:Chrome 扩展 - 从网页中检索全局变量

于 2021-07-14T05:33:25.433 回答