javascript - 使用 Chrome 循环自定义协议
问题描述
我目前正在循环使用自定义协议以将信息从浏览器传递到 Electron 应用程序。这适用于除 Chrome 之外的所有浏览器。下面的代码在 iframe 中运行协议,然后将数据加载到 Electron。
代码
<iframe id="dataDiv" style="width:100%;align:center;overflow-y:hidden;" frameborder="0" scrolling="no" />
url = "custom-protocol://some-data?"
for (i = 0; i < 5; i++) {
$("#dataDiv").attr("src", url + i);
}
上面的代码是我试图实现这一目标的伪代码。
期待
我的期望是它会循环 5 次,并将数据传递到 Electron 应用程序中。如前所述,这似乎只适用于 IE 和 Firefox。
实际结果
在调试 Chrome 时,我发现它只执行第一页。从外观上看,无论出于何种原因,Chrome 只执行循环中的第一个协议加载。
其他尝试
我也试过在循环中做一个超时。认为它可能只是触发协议太快,而 Chrome 不喜欢这样。那也失败了。
我什至尝试过循环创建一个新选项卡而不是 iframe 的 javascript.. 它给了我相同的结果。
有谁知道 Chrome 中的安全设置会阻止自定义协议同时多次加载到 Chrome 中?
解决方案
答案很简单,不要使用协议来 POST 数据。相反,我最终在 electron 中创建了一个 Web 服务器,并通过 URL 传递数据。
var http=require('http');
var url=require('url');
var server=http.createServer(function(req,res){
var pathname=url.parse(req.url).pathname;
switch(pathname){
case '/data':
var query=url.parse(req.url).query;
someFunction(query);
res.end('200 ok');
break;
}
}).listen(8080);
这样我就可以使用 AJAX 来启动并将数据传递给 Electron,而不是 iframe。
然后你只需像这样传递数据:
http://localhost:8080/data?{insertyourdatahere}
推荐阅读
- netsuite - 如何使项目始终显示在列表的最后(Netsuite 高级 PDF)
- c++ - 比较 char 和 char[i] 在hangman 游戏中不起作用
- mysql - Sequelize UUID with mySQL: Unable to set default value
- security - 与 Identity Server 4 中浏览器 cookie 中保存的令牌相关的安全问题
- r - 如何在 R 中突出显示特定的单元格值
- python - Openpyxl - 如何遍历熊猫数据框并将它们导出到一个文件中的单独工作表中?
- javascript - Google Maps JavaScript API 未显示在我的 React 应用程序中
- java - Maven 无法编译具有依赖项的项目
- django - 使用 swagger_auto_schema 时 drf_yasj 上没有参数
- c++ - Gdb 错误地在 unordered_map 中显示 2 个具有相同键的元素