我正在尝试向一些Android设备发送推送更新.他们中的一些人同时拥有一个新的身份证,所以我谷歌告诉我有规范的ID.从我阅读的文档中:
如果设置了message_id,请检查registration_id:
我错过了一个部分,或者如果您向Google发送超过1个注册ID,这是否含糊不清?
我的请求(替换ID为可读性):
"{"data":{"favorite":1},"registration_ids":["1","2","3","4","5","6"]}"
Run Code Online (Sandbox Code Playgroud)
Google的回复是:
{
"multicast_id":7917175795873320166,
"success":6,
"failure":0,
"canonical_ids":4,
"results":[
{"registration_id":"3","message_id":"m1"},
{"message_id":"m1"},
{"message_id":"m1"},
{"registration_id":"3","message_id":"m1"},
{"registration_id":"3","message_id":"m1"},
{"registration_id":"3","message_id":"m1"}
]
}
Run Code Online (Sandbox Code Playgroud)
从这里,我知道id 3是正确的,但是我应该用3替换哪些原始id?为每个注册的ID发送每条消息都是浪费.我在这里阅读了一篇关于Stackoverflow(GCM和id处理)的文章,为Java服务器解决了这个问题,但我的不是(RoR).
关于如何解决这个问题的任何想法?
我想更改div中的所有链接,以便它们不再引用页面,但在单击时运行javascript函数.为此,我写了这个函数:
function buildPageInDiv(htmlString){
console.log(typeof htmlString);
$div = $(htmlString).children("div#myDiv");
$div.children("a").each(function(i, element){toJavascriptLinks(element)});
document.getElementById("targetDiv").innerHTML = $div[0].innerHTML;
}
Run Code Online (Sandbox Code Playgroud)
调用此函数:
function toJavascriptLinks(element){
element.href="#";
element.onclick = function(){console.log('Yeah!')};
console.log(element);
}
Run Code Online (Sandbox Code Playgroud)
现在,当我运行'buildPageInDiv'时,在控制台上打印'string',所有"href"都变为"#",并且对于div中的每一个,控制台都会打印元素:
<a href="#">
Run Code Online (Sandbox Code Playgroud)
这里没有onclick的迹象,点击链接在控制台上没有显示任何内容.
我在这里错过了什么?
编辑:
我在错误的地方寻找.问题是我在将innerHTML附加到'targetDiv'之前运行'toJavascriptLinks(element)'.这对于href属性来说没有问题,但它适用于onclick属性.解决方案只是先将它放在'targetDiv'中,然后在'targetDiv'上运行'toJavascriptLinks(element)':
function buildPageInDiv(htmlString){
console.log(typeof htmlString);
var content = $(htmlString).children("div#myDiv")[0].innerHTML;
document.getElementById("targetDiv").innerHTML = content;
$("div#targetDiv").children("a").each(function(i, element) toJavascriptLinks(element)});
}
Run Code Online (Sandbox Code Playgroud)
虽然问题不在我最初发布的代码中,但下面的综合答案使我得到了解决方案.