.
ubuntu, ( win32 /).
jnlp . URL- jnlp javaws. , .
, . URL-, , - jnlp. , . AS-IS, .. ..
:
/USR///JNLP-
import struct
import sys
import threading
import Queue
import json
import os
if sys.platform == "win32":
import os, msvcrt
msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
def send_message(message):
sys.stdout.write(struct.pack('I', len(message)))
sys.stdout.write(message)
sys.stdout.flush()
def read_thread_func(queue):
message_number = 0
while 1:
text_length_bytes = sys.stdin.read(4)
if len(text_length_bytes) == 0:
if queue:
queue.put(None)
sys.exit(0)
text_length = struct.unpack('i', text_length_bytes)[0]
text = sys.stdin.read(text_length).decode('utf-8')
decoded = json.loads(text);
os.system("javaws " + decoded['url']);
def Main():
read_thread_func(None)
send_message('"complete"')
sys.exit(0)
if __name__ == '__main__':
Main()
chrome - 2 , :
manifest.json
{
"manifest_version": 2,
"background": {
"persistent": false,
"scripts": [ "bg.js" ]
},
"name": "JNLP Fixer",
"description": "Handle JNLPs",
"version": "1.0",
"permissions": [
"downloads", "nativeMessaging"
]
}
bg.js( )
chrome.downloads.onCreated.addListener(function(downloadId) {
var expr = /\.jnlp$/;
var hostExpr = /(http|https):\/\/internal.company.com\//;
if (hostExpr.test(downloadId.url)) {
if (downloadId.state == "in_progress") {
console.log(downloadId.url);
chrome.downloads.cancel(downloadId.id,function() {
console.log("cancelled");
});
chrome.runtime.sendNativeMessage("com.hcs.jnlplauncher",
{url:downloadId.url},
function(response)
{
console.log(chrome.runtime.lastError);
console.log(response);
}
);
}
}
})
manifest.json bg.js Unpacked extension chrome chrome://extensions
chrome://extensions.
script.
: com.hcs.jnlplauncher.json
{
"name": "com.hcs.jnlplauncher",
"description": "JNLP Launcher",
"path": "/usr/local/bin/jnlp-launcher",
"type": "stdio",
"allowed_origins": [
"chrome-extension://iacomlhfiphkdfjjjmlgckdkhmkhkibe/"
]
}
"~/.config/google-chrome/NativeMessagingHosts" ( Linux). . google .
.
, javaws . ( ). /usr/bin - .
jnlp !!! , ClickToOpen Downloads.!
- / , . , (Chris Holt - hobie744@gmail.com) . , , NativeMessagingHosts . , 2 ? Chrome Extensions NativeMessaging. API, , , .