javascript - 使用 Chrome 循环自定义协议(protocol)

标签 javascript google-chrome electron

我目前正在循环使用自定义协议(protocol)以将信息从浏览器传递到 Electron 应用程序。这适用于除 Chrome 之外的所有浏览器。下面的代码在 iframe 中运行协议(protocol),然后将数据加载到 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 只执行循环中的第一个协议(protocol)加载。

其他尝试
  • 我也试过在循环中做一个超时。想也许是
    只是触发协议(protocol)太快了,Chrome 不喜欢这样。
    那也失败了。
  • 我什至试过循环创建一个新标签的javascript,
    而不是 iframe .. 它给了我相同的结果。

  • 有谁知道 Chrome 中的安全设置会阻止自定义协议(protocol)同时多次加载到 Chrome 中?

    最佳答案

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

    关于javascript - 使用 Chrome 循环自定义协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55735666/

    相关文章:

    api - 我如何学习 chrome.extension.sendRequest 方法?

    node.js - 有没有办法限制Node.js Electron 应用程序只能访问某些网址

    javascript - 将 Babylon.js 与 Electron 一起使用

    javascript - 我如何制作幻灯片,即加载开始时和悬停时停止

    javascript - JQuery更新html中的内容

    html - Firefox 和 Chrome 中的绝对定位问题

    google-chrome - Ubuntu 16.04 上的 Tensorboard 问题

    javascript - 使用 Gitlab 进行 Electron 更新

    javascript - 如何获取嵌套div的相对距离?

    javascript - 可缩放 Canvas 作为 Google Maps Javascript API 中的叠加层