我正在尝试从服务工作者那里获取Web服务.此服务是使用基本Apache身份验证保护的JSP,因此我必须提供凭据以在请求标头中进行身份验证.以下请求在主窗口中工作正常:
self.addEventListener('push', function(event) {
console.log('Received a push message', event);
event.waitUntil(
fetch(ONLINE_SITE_ENDPOINT, {
method: 'GET',
mode: 'cors',
headers: {
'Accept': 'application/json',
'Authorization': 'Basic btoa(auth info)'
}
}).then(function(response) {
//process response
}).catch(function(err) {
})
);
});
Run Code Online (Sandbox Code Playgroud)
该代码进入一个event.waitUntil()范围,进入一个从'push'事件监听器调用的函数.但是,同样的确切调用失败了401(未授权).开发人员工具中的"网络"面板显示未发送标头:
OPTIONS /latest-new.jsp HTTP/1.1
Host: {an accessible host}
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://localhost
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36
Access-Control-Request-Headers: accept, authorization
Accept: */*
Referer: http://localhost/service-worker.js
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Run Code Online (Sandbox Code Playgroud)
这里有什么东西不见了吗?或者只是服务工作者无法实现?
一些额外的信息:只是不能使用XMLHttpRequest,因为它在服务工作者范围内是"未定义".检索JSON之前JSP上的标头:
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序.通过蓝牙从设备接收一些传输.这个应用程序旨在托管在Win上.Server 2008或Win.7,在C#.NET 4.5上开发.通过使用设备SDK进行集成,因此我只需要知道从哪个COM端口接收数据.当我从蓝牙设置手动创建虚拟COM端口时,这不是问题.
这种集成应该部署在很多设备中,要求用户手动创建虚拟COM端口不是一种选择......有没有办法从.NET代码创建它?我需要创建虚拟COM端口(监听蓝牙传输)并知道其端口名称.
编辑:我愿意接受新的方法(C++,power shell脚本,CMD,bat文件......总是在Windows技术中
我已经尝试过一些COM集成(就像这个),但它似乎仅限于.NetCF(我没有coredll.dll,因为它在Windows Server或Windows 7上运行,其他缺少的东西......已经试图'强迫'加载DLL而没有运气).类似但有效的东西将是理想的解决方案
我在这个问题上挣扎了一个多星期......我们已经使用Firebase和Service Worker在Chrome中实现了推送消息.一切正常,消息正在使用有效负载正确发送和接收.在服务工作者上,我们处理推送消息以显示通知和notificationclick事件,以便在单击时将用户发送到特定URL,然后关闭通知.
问题在于"旧"通知:如果用户收到消息但没有立即点击它,它会保留一段时间,然后在一段时间后(不确定多少)他点击通知 - 他被重定向到https:// [domain] /firebase-messaging-sw.js 我们已经跟踪了整个过程:收到的通知都包含了所有信息(网址也是正确的,实际上如果他在收到邮件时点击了它就可以了正好).但如果通知在那里存在一段时间就会被"清空".
发送的消息非常简单(仅用于显示没有TTL,也没有使用过期参数).curl命令看起来像这样:
curl -X POST
-H "Authorization: key=[SERVER API KEY]"
-H "Content-Type: application/json"
-d '{
"notification":{
"click_action":"[URL to be redirected]",
"icon":"[A custom image]",
"title":"[News title]"},
"to":"/topics/[A topic]"
}'
"https://fcm.googleapis.com/fcm/send"
Run Code Online (Sandbox Code Playgroud)
这是用于处理服务工作者上的推送消息的代码:
self.addEventListener('push', function(event) {
console.log('Push message received', event);
var data = {};
if (event.data) {
data = event.data.json();
}
event.stopImmediatePropagation();
showNotification(data.notification);
});
function showNotification(notification) {
var click_action = notification.click_action; //<-- This is correct!
var options = {
body: notification.body,
icon: notification.icon,
subtitle: notification.subtitle, …Run Code Online (Sandbox Code Playgroud) .net ×1
bluetooth ×1
c# ×1
firebase ×1
html5 ×1
javascript ×1
jsp ×1
push ×1
serial-port ×1
windows ×1