首页 > 解决方案 > 使用 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 中的安全设置会阻止自定义协议同时多次加载到 Chrome 中?

标签: javascriptgoogle-chromeelectron

解决方案


答案很简单,不要使用协议来 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}


推荐阅读