我发现有关"扩展程序无法在新标签页中连接的问题",解决方案是使用chrome.tab模块,但是没有找到类似这样的内容:
我很多天都被困在这里,如果有人能帮助我,我会很高兴。
我正在使用跨域调用的扩展程序,但只有当我的页面是纯HTML页面时,我的网页才能连接到扩展程序(我认为是内容脚本)。如果我使用以下内容更改页面的内容: document.open(); 文件撰写(HTML); document.close(); (我这样做是为了在用户登录时保持我的网页的网址相同)
我无法从扩展程序获得任何响应。 有没有我错过的解决方案。
参考代码: 我替换页面的HTML:
PageLoader.prototype.loadHTML = function(html) {
if (history.pushState)
try {window.history.pushState(null, null, document.URL);}
catch (e) {};
document.open();
document.write(html);
document.close();
};
跨域代码: 这是点击某个按钮时调用的功能
`window.addEventListener( "message", function(event) {
if (event.source != window ) return;
callback(event.data.text);
});
window.postMessage( { type: "com_logincat_xhr_get", url: url }, "*");
`
此postMessage已完成但未获得 chrome扩展程序的content_script.js 的任何回复(仅当我在我的网页中使用document.write替换内容时)。 content_script.js 还包含消息的eventListner。
window.addEventListener( "message", function(event)
{
/* It contains piece of code to send message (chrome.runtime.sendmessage) */
};
我发现在某些地方,content_script.js只在pageLoad上附加,而document.write可能会替换东西,但我没有找到任何解决办法。
我认为代码是正确的,因为当页面是一个简单的直接html时,它可以顺利运行。我不知道document.write对我的网页做了什么错误 我希望它会有所帮助,
感谢您的帮助。
答案 0 :(得分:0)
嘿,这是我解决上述问题的方法。
我发现Extensions的content_script.js仅在pageLoad上附加到DOM。 并使用 document.write(' html') 我正在修改DOM,它正在创建与content_script.js连接的问题, 所以我决定用 document.documentElement.innerHTML = html;
使用这个我遇到了另一个问题,即脚本没有被执行,这是var html。
为此我做了这个:
var scriptToInclude = document.getElementsByTagName('script');
for (var n = 0; n < scriptToInclude.length; n++)
eval(scriptToInclude[n].innerHTML);
它有效:)