低级动物 2017-06-14 06:52 采纳率: 0%
浏览 2335

chrome插件开发的问题,contentscript与popup相关

插件页面上的调用如下

 chrome.tabs.getSelected(null, function (tab) {
            chrome.tabs.executeScript(tab.id, {
                code: "plocalize(" + paramString + ");"
            }, function () {
                console.log('done');
            });
        });

plocalize在contentscript的一个js文件中
但是有时候必须刷新当前页面,否则会报出Uncaught ReferenceError: plocalize is not defined错误,但这时候看到页面的contentscript里是有这个文件的

不知道描述的清不清楚,有什么问题我再解释

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-06 00:06
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是由于Chrome插件在加载时执行了executeScript方法来执行JavaScript代码。当plocalize函数被调用后,它会被立即执行,所以每次用户打开一个新标签页或窗口时,都会触发plocalize函数的执行。

    解决这个问题的方法是将plocalize函数放在DOMContentLoaded事件监听器上,这样就可以确保函数只在DOM完全加载后才被执行。以下是一个示例:

    document.addEventListener('DOMContentLoaded', function() {
        chrome.tabs.getSelected(null, function(tab) {
            chrome.tabs.executeScript(tab.id, {
                code: 'var plocalize = function(paramString){...}',
                type: 'module'
            }, function() {
                console.log('done');
            });
        });
    });
    

    在这个例子中,我们使用DOMContentLoaded事件监听器来确保DOM完全加载后再执行executeScript方法。这样可以避免因为plocalize函数在页面首次渲染时就被执行而产生的未定义错误。

    评论

报告相同问题?