Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Chrome在自定义协议上循环_Javascript_Google Chrome_Electron - Fatal编程技术网

Javascript 使用Chrome在自定义协议上循环

Javascript 使用Chrome在自定义协议上循环,javascript,google-chrome,electron,Javascript,Google 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

我目前正在通过一个自定义协议将信息从浏览器传递到一个电子应用程序。这在除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);
}

url=“自定义-protocol://some-data?"
对于(i=0;i<5;i++){
$(“#dataDiv”).attr(“src”,url+i);
}
上面的代码是我试图实现这一点的伪代码

期望值

我的期望是,它将循环5次,并将数据传递到Electron应用程序。如前所述,这似乎只适用于IE和Firefox

实际结果

调试Chrome时,我发现它只执行第一页。从外观上看,无论出于何种原因,Chrome只执行循环中的第一个协议加载

其他尝试

  • 我还尝试在循环中执行超时。认为可能是 只是触发协议太快了,Chrome不喜欢这样。 这也失败了

  • 我甚至尝试过在javascript上循环创建一个新选项卡, 而不是iframe。。它给了我同样的结果


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

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

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