Chrome扩展引入@mtucourses/rate-my-professors模块调用异常求助
Chrome扩展调用Rate My Professor API返回空对象问题
我正在开发一款Chrome扩展,使用@mtucourses/rate-my-professors模块调用Rate My Professor的GraphQL API获取教授评分,并将评分展示在我校课程门户上。在VS Code中运行测试代码时能正常返回教授信息与评分,但移植到Chrome扩展后,basicProfInfo始终为空对象,导致功能失效。我尝试过更换browserify以外的打包工具(如extension CLI),问题依旧。
本地测试代码(可正常运行)
const ratings = require('@mtucourses/rate-my-professors').default; (async () => { const profName = 'Hossein Kassiri'; const basicProfInfo = await ratings.searchTeacher(profName, 'U2Nob29sLTE0OTU='); const id = basicProfInfo[0].id; console.log(basicProfInfo); //console.log(id); // 获取教授平均评分 const profInfo = await ratings.getTeacher(id); const avgRating = profInfo.avgRating; //console.log(profInfo); console.log(avgRating); console.log("https://www.ratemyprofessors.com/professor?tid=" + profInfo.legacyId); })();
Chrome扩展代码
content.js
const professorLinks = document.querySelectorAll('td[width="15%"] a'); professorLinks.forEach(link => { const professorName = link.textContent; console.log(professorName); chrome.runtime.sendMessage({ professorName }, (response) => { console.log(response); if (response.error) { link.insertAdjacentHTML('afterend', `<div>Error: ${response.error}</div>`); } else { link.insertAdjacentHTML('afterend', `<div>${response}/5</div>`); } }); });
background.js(已用browserify打包)
const ratings = require('@mtucourses/rate-my-professors').default; console.log("background.js loaded"); async function getAvgRating(profName) { const basicProfInfo = await ratings.searchTeacher(profName, 'U2Nob29sLTE0OTU='); console.log(basicProfInfo); if (!basicProfInfo || basicProfInfo.length === 0) { return { error: 'Professor not found' }; } const id = basicProfInfo[0].id; const profInfo = await ratings.getTeacher(id); const avgRating = profInfo.avgRating; console.log(avgRating); return avgRating; } chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { console.log('received message from content script:', request); console.log(request.professorName); getAvgRating(request.professorName).then(response => { sendResponse(response); }); return true; });
问题现象
- 本地测试时,
basicProfInfo输出为包含教授信息的数组,能正常获取评分。 - 在Chrome扩展的background.js中,
basicProfInfo输出为空对象,触发“Professor not found”错误。
内容的提问来源于stack exchange,提问作者Mohammad
相关产品推荐
相关产品推荐

