页面重新加载chrome扩展消息发送
page reloads on chrome extension message send?
所以我运行一个数据收集项目注入一个html表单到第三方网站,通过chrome扩展,它指示用户描述他们看到的数据,并提交给我的服务器。
然而,由于一些奇怪的原因,每当用户单击"提交"按钮将表单内容发送到后台页面(并从那里发送到服务器)时,底层页面就会重新加载,不仅如此,它还会重新加载我注入的表单内容,在重新加载后显示在url中。这是一种奇怪的行为。
我不知道这是我的代码中的东西,或者即使它是底层网页代码中的东西(也许它重新定义了chrome.runtime.sendMessage
或某种反扩展技术?!!?)。如果可能的话,我真的很想停止这种行为……有人有什么想法吗?
我的代码的相关部分,稍微简化一下:
var cururl = window.location.href
var codestring= "[A HTML FORM TO INJECT]"
var raformvalues = {};
function codeValues() {
$.each($('#mainCoding').serializeArray(), function(i, field) {
raformvalues[field.name] = field.value;
});
}
function sendValues() {
let pageinfo = {"page": document.documentElement.outerHTML,
"url": cururl,
"title": document.title,
"timestamp": String(Date.now())};
let tosend = $.extend({"type": "doctype"}, pageinfo, raformvalues);
chrome.runtime.sendMessage(tosend);
chrome.storage.local.set({'lasturl': pageinfo.url});
$("#pgcodediv").empty();
location.href = cururl; // note: I added this line to try to stop the reloading and url/changing behavior. behavior is the same with and without it.
}
function appendCodingInfo() {
$("#headerID").append(codestring);
$( ":checkbox, :radio" ).click( codeValues );
$( ":text" ).change( codeValues );
$( "#codingsubmit" ).click(sendValues);
}
appendCodingInfo()
当用户点击提交按钮(#codingsubmit
,当然),消息得到传递,后台页面正确处理它,但页面自动刷新,并且raformvalues
的内容显示在刷新页面的URL中(即,当我从控制台调用window.location.href
时,该对象的内容显示为get请求的参数,即http://url?prop=value&prop2=value2—不知道为什么。
如果您在表单中单击带有type="submit"
的按钮,默认情况下浏览器将在提交表单后重新加载页面。
为了防止页面重新加载,可以将type="submit"
替换为type="button"
,或者在sendValues
处理程序中调用e.preventDefault()
。
根据MDN, button的默认值为submit
。
按钮类型。可能的值是:
submit:按钮向服务器提交表单数据。如果属性未指定,或者属性被动态更改为空值或无效值,这是默认值。
reset:按钮将所有控件重置为初始值。
button:按钮没有默认行为。它可以有与元素的事件相关联的客户端脚本,这些脚本在事件发生时触发。
menu:按钮打开一个通过其指定元素定义的弹出式菜单。
- chrome扩展中的navigator.geolocation.getCurrentPosition
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- chrome扩展更改主机/域警告
- 如何在chrome扩展中重定向到html页面
- Chrome扩展没有't在重新加载之前考虑期权价值
- 如何通过自己获得Chrome扩展的用户反馈/错误报告
- 试图阻止Chrome通过扩展关闭
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- 从选项页面更新chrome扩展清单权限
- 如何将chrome扩展功能移植到移动设备(特别是jquery和trello)
- Chrome扩展:遍历不同的页面并收集数据
- Chrome扩展 chrome.storage 如何同时进行大量获取和设置并避免竞争条件
- Chrome扩展:Chrome.tabs.executeScript不工作
- 中的访问扩展chrome://extensions页
- 如何在扩展Chrome DevTool时检索请求的启动器
- Chrome扩展-Chrome报警API为创建的每个新报警重新安排所有报警
- 是否有任何方法来扩展chrome's __commandLineAPI
- 谷歌Chrome扩展Chrome .tab . onupdate . addlistener
- 创建在页面上注入脚本的扩展chrome内容
- Chrome扩展:Chrome扩展中未定义的变量,即使它存在于控制台中