获取chrome.socket插件示例在Cordova下运行

时间:2014-08-06 18:55:05

标签: cordova google-chrome-app

我试图从这个问题的例子到Android平板电脑上工作。

Cordova chrome.socket API. Any example?

示例失败,我相信它是因为manifest.json文件中的网络权限未设置。

我的问题是它属于何处或我在何处放置这些权限。

感谢您的帮助。

杰克

1 个答案:

答案 0 :(得分:1)

您不需要Cordova应用程序的任何特殊清单权限。只要您在答案中使用示例代码(不是问题;))

我对Cordova应用程序的唯一警告是,您需要明确等待" deviceready" chrome.socket API可用之前的事件。

我刚用这个JS测试过,我的设备(Nexus 7)连接到Yahoo并下载主页的前千字节,并将其记录到控制台。

function stringToArrayBuffer(string) {
    var buffer = new ArrayBuffer(string.length);
    var bufView = new Uint8Array(buffer);
    for (var i=0; i < string.length; i++) {
        bufView[i] = string.charCodeAt(i);
    }
    return buffer;
}

function arrayBufferToString(buffer) {
    return String.fromCharCode.apply(null, new Uint8Array(buffer));
}

// Set the hostname; we'll need it for the HTTP request as well
var hostname = "www.yahoo.com";

document.addEventListener('deviceready', function() {
    chrome.socket.create("tcp", function(createInfo) {
        var socketId = createInfo.socketId;
        chrome.socket.connect(socketId, hostname, 80, function(result) {
            if (result === 0) {
                var requestString = "GET / HTTP/1.1\r\nHost: "+hostname+"\r\nConnection: close\r\n\r\n";
                var requestBuffer = stringToArrayBuffer(requestString);
                chrome.socket.write(socketId, requestBuffer, function(writeInfo) {
                    chrome.socket.read(socketId, 1000, function(readInfo) {
                        var htmlString = arrayBufferToString(readInfo.data);
                        // do something with htmlString here
                        console.log(htmlString);
                    });
                });
            }
        });
    });
}, false);