我可以通过iframe注册服务工作者。当我尝试运行" pushManager.subscribe"我有:
func createPolygonFromTheDrawablePoints(){
let numberOfPoints = self.coordinates.count
//do not draw in mapview a single point
if numberOfPoints > 2 { addPolyGonInMapView(drawableLoc: coordinates) }//neglects a single touch
coordinates = []
self.canvasView.image = nil
self.canvasView.removeFromSuperview()
let origImage = UIImage(named: "pen")
let tintedImage = origImage?.withRenderingMode(UIImageRenderingMode.alwaysTemplate)
drawBtn.setImage(tintedImage, for: .normal)
drawBtn.tintColor = UIColor.red
drawBtn.backgroundColor = UIColor.white
}
func addPolyGonInMapView( drawableLoc:[CLLocationCoordinate2D]){
isDrawingModeEnabled = true
let path = GMSMutablePath()
for loc in drawableLoc{
path.add(loc)
}
let newpolygon = GMSPolygon(path: path)
newpolygon.strokeWidth = 3
newpolygon.strokeColor = UIColor.black
newpolygon.fillColor = UIColor.black.withAlphaComponent(0.5)
newpolygon.map = googleMapView
if cancelDrawingBtn.isHidden == true{ cancelDrawingBtn.isHidden = false }
userDrawablePolygons.append(newpolygon)
addPolygonDeleteAnnotation(endCoordinate: drawableLoc.last!,polygon: newpolygon)
}
此问题仅限于Chrome中的iframe。它在Firefox中运行良好。如果没有Chrome中的iframe,它的效果很好
答案 0 :(得分:2)
长话短说,你不能! 必须打开注册服务工作者的路径(是顶级域)才能注册服务工作者。 实现这一目标的一种方法是:
假设你的iframe看起来像这样:
<iframe src="https://example.com"></iframe>
使用postMessage与iframe通信并请求权限,然后window.open("https://example.com/")
注册服务工作者并获取令牌。
希望这会有所帮助:)
答案 1 :(得分:2)
您不能使用iframe,也不允许使用。
必须从顶级窗口执行权限请求。
唯一的选择(例如我们用于Pushpad Express)是从iframe重定向到/打开一个新窗口,然后从顶级窗口询问权限,最后重定向回来。
这是为了让用户明白哪个网站要求推送通知的权限。否则,担心例如广告可能会显示推送通知的提示,这会产生误导。
BTW我还建议在sandbox
的{{1}}属性中添加一个新值,以便允许提示推送通知,但规范目前并不支持它。
答案 2 :(得分:0)
Chrome要求您订阅从顶级域名推送,否则不太清楚用户允许推送的来源。