使用Chrome循环自定义协议

时间:2019-04-17 20:40:56

标签: javascript google-chrome electron

我目前正在遍历自定义协议,以将信息从浏览器传递到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却不喜欢这样。 那也失败了。

  • 我什至尝试遍历创建新标签的JavaScript, 而不是iframe。它给了我相同的结果。

有人知道Chrome中的安全设置会阻止自定义协议同时多次加载到Chrome中吗?

1 个答案:

答案 0 :(得分:0)

答案很简单,不要使用协议发布数据。相反,我最终在electronic中创建了一个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}