- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用中,我实现了创建 XMPPRoom 和邀请用户。现在,我正在寻找一种方法来存储这些组(我创建的组或我受邀加入的组),以便我可以在需要时轻松地将其检索回我的应用程序。我遇到了 XEP-0048 书签,但是,我找不到任何在线使用它的示例。有人用过这个吗?能否分享一些示例?
艾哈迈德
最佳答案
根据 XEP-0048: Bookmarks , 要将书签上传到服务器,您必须像这样发送一个 iq
请求:
<iq from='juliet@capulet.lit/balcony' type='set' id='pip1'>
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
<publish node='storage:bookmarks'>
<item id='current'>
<storage xmlns='storage:bookmarks'>
<conference name='The Play's the Thing'
autojoin='true'
jid='theplay@conference.shakespeare.lit'>
<nick>JC</nick>
</conference>
</storage>
</item>
</publish>
<publish-options>
<x xmlns='jabber:x:data' type='submit'>
<field var='FORM_TYPE' type='hidden'>
<value>http://jabber.org/protocol/pubsub#publish-options</value>
</field>
<field var='pubsub#persist_items'>
<value>true</value>
</field>
<field var='pubsub#access_model'>
<value>whitelist</value>
</field>
</x>
</publish-options>
</pubsub>
</iq>
在使用 NSXMLElement 类的 Objective-C 中,上面的 XML 可以这样写:
NSXMLElement *pubsub = [[NSXMLElement alloc] initWithName:@"pubsub" xmlns:@"http://jabber.org/protocol/pubsub"];
NSXMLElement *publish = [[NSXMLElement alloc] initWithName:@"publish"];
[publish addAttributeWithName:@"node" stringValue:@"storage:bookmarks"];
NSXMLElement *item = [[NSXMLElement alloc] initWithName:@"item"];
[item addAttributeWithName:@"id" stringValue:@"current"];
NSXMLElement *storage = [[NSXMLElement alloc] initWithName:@"storage" xmlns:@"storage:bookmarks"];
NSXMLElement *conference = [[NSXMLElement alloc] initWithName:@"conference"];
[conference addAttributeWithName:@"name" stringValue:@"The Play's the Thing"];
[conference addAttributeWithName:@"autojoin" stringValue:@"true"];
[conference addAttributeWithName:@"jid" stringValue:@"theplay@conference.shakespeare.lit"];
NSXMLElement *nick = [[NSXMLElement alloc] initWithName:@"nick" stringValue:@"JC"];
[conference addChild:nick];
[storage addChild:conference];
[item addChild:storage];
[publish addChild:item];
NSXMLElement *publish_options = [[NSXMLElement alloc] initWithName:@"publish-options"];
NSXMLElement *x = [[NSXMLElement alloc] initWithName:@"x" xmlns:@"jabber:x:data"];
[x addAttributeWithName:@"type" stringValue:@"submit"];
NSXMLElement *field1 = [[NSXMLElement alloc] initWithName:@"field"];
[field1 addAttributeWithName:@"var" stringValue:@"FORM_TYPE"];
[field1 addAttributeWithName:@"type" stringValue:@"hidden"];
NSXMLElement *value1 = [[NSXMLElement alloc] initWithName:@"value" stringValue:@"http://jabber.org/protocol/pubsub#publish-options"];
[field1 addChild:value1];
[x addChild:field1];
NSXMLElement *field2 = [[NSXMLElement alloc] initWithName:@"field"];
[field2 addAttributeWithName:@"var" stringValue:@"pubsub#persist_items"];
NSXMLElement *value2 = [[NSXMLElement alloc] initWithName:@"value" stringValue:@"whitelist"];
[field2 addChild:value2];
[x addChild:field2];
[publish_options addChild:x];
[pubsub addChild:publish];
[pubsub addChild:publish_options];
XMPPIQ *iq = [[XMPPIQ alloc] initWithType:@"set" child:pubsub];
[iq addAttributeWithName:@"from" stringValue:@"juliet@capulet.lit/balcony"];
[iq addAttributeWithName:@"id" stringValue:@"pip1"];
当然也可以只用一个NSXMLElement来写,比如
NSXMLElement *iq = [NSXMLElement alloc] initWithName:@"iq" stringValue:[NSString stringWithFormat:@"all xml code from first paragraph with %@ to add your dynamic data...", data1, data2, ...];
[iq addAttributeWithName:@"from" stringValue:@"juliet@capulet.lit/balcony"];
[iq addAttributeWithName:@"id" stringValue:@"pip1"];
创建 iq 后,是时候将它发送到服务器了
[xmppStream sendElement:iq];
这是将书签发送到服务器的方式。您在 XMPPStream 委托(delegate) - (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq
中监听服务器响应,服务器响应应该是这样的:
<iq to='juliet@capulet.lit/balcony' type='result' id='pip1'/>
或者在 objective-c 代码中:
- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq
{
if([iq isResultIQ])
{
if([[iq attributeStringValueForName:@"id"] isEqualToString:@"pip1"])
{
NSLog(@"Bookmarks with id %@ succesfully uploaded", [iq attributeStringValueForName:@"id"]);
}
}
}
现在,基于上面的示例,为 clinet 从服务器(XEP-0048: Bookmarks 3.3 Retrieving Data)请求书签的 xml 创建 objective-c 代码:
<iq from='juliet@capulet.lit/randomID' type='get' id='retrieve1'>
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
<items node='storage:bookmarks'/>
</pubsub>
</iq>
objective-c 代码:
NSXMLElement *pubsub = [[NSXMLElement alloc] initWithName:@"pubsub" xmlns:@"http://jabber.org/protocol/pubsub"];
NSXMLElement *items = [[NSXMLElement alloc] initWithName:@"items"];
[items addAttributeWithName:@"node" stringValue:@"storage:bookmarks"];
[pubsub addChild:items];
XMPPIQ *iq = [[XMPPIQ alloc] initWithType:@"get" child:pubsub];
[iq addAttributeWithName:@"from" stringValue:@"juliet@capulet.lit/balcony"];
[iq addAttributeWithName:@"id" stringValue:@"retrive1"];
像以前一样发送到服务器:
[xmppStream sendElement:iq];
并像以前一样监听服务器响应:
<iq type='result'
to='juliet@capulet.lit/randomID'
id='retrieve1'>
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
<items node='storage:bookmarks'>
<item id='current'>
<storage xmlns='storage:bookmarks'>
<conference name='The Play's the Thing'
autojoin='true'
jid='theplay@conference.shakespeare.lit'>
<nick>JC</nick>
</conference>
</storage>
</item>
</items>
</pubsub>
</iq>
或 objective-c 代码:
- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq
{
if([iq isResultIQ])
{
if([[iq attributeStringValueForName:@"id"] isEqualToString:@"retrive1"])
{
NSXMLElement *pubsub = [iq elementForName:@"pubsub"];
NSArray *items = [pubsub elementsForName:@"items"];
NSLog(@"Bookmarks for id %@ are: %@", [iq attributeStringValueForName:@"id"], items);
}
}
}
关于ios - XMPPFramework - XEP-0048 : Bookmark Storage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20792739/
问题: com.itextpdf.kernel.PdfException:Pdf 间接对象属于其他 PDF 文档。将对象复制到当前 pdf 文档。 我想将 PDF 文档与一组已编辑的书签合并,以保持书
我不知道如何删除添加段落时自动生成的书签: Paragraph inicio = document.LastSection.AddParagraph(); inicio.Style = "Headin
我们正在尝试为 iPhone 创建自定义浏览器应用程序。在此应用程序中,我们希望能够允许用户单击标记为“添加到主屏幕”的链接,就像 Safari 浏览器一样,并让我们的自定义浏览器将链接/图标添加到主
是否有一种简单的方法来创建一个链接,同时执行这两种操作? 基本上,我想要一个非常简单的方法来做到这一点。任何建议都是有帮助的。 最佳答案 仅在 IE 中: Bookmark This Site 在 F
虽然这 question和这个 question接近我的要求,我相信可能有一个更以开发人员为中心的解决方案。 所以,那么 - 您用什么来跟踪您每天遇到但当时无法阅读的所有重要信息。我目前使用 del.
这可能不是我问过的最愚蠢的问题,但是我在Stack Overflow中找到了一些帖子,希望保留这些帖子作为引用,并希望将它们添加到我的帐户中。我怎么做? 最佳答案 您可以将它们标记为收藏夹(投票按钮下
我阅读了这份文档:A Guide to Branching with Mercurial,特别是标题为Branching with Bookmarks的部分。 它说: Now you’ve got t
我在一个大的 .chm 文件中有一个巨大的收藏夹列表,我知道收藏夹附加到每个用户 AppData 文件夹中的 hh.dat 文件。我找到了它,当我在记事本中打开 hh.dat 文件时,我看到了书签链接
是否有类似使用 Javascript 或 HTML 或 PHP 的书签按钮,我们可以为网站添加书签?无需手动操作。 喜欢, 当用户点击按钮时。网页应自动被浏览器收藏。 谢谢 最佳答案 不是真的。曾经有
通常,当我在网站上发表评论或回答时,我喜欢留意其他人的其他回复,如果合适,可能会再次回复。有时我会将某个页面加入书签一段时间,有时我最终会重新搜索关键字以再次找到该帖子。我一直认为应该有比我的内存更好
我使用history.js更改浏览器的历史状态。假设我使用这段代码: History.pushState({someState:2}, null, "?someState=2"); 绑定(bind)到
有没有办法对我使用 NERDTree vim 插件看到的书签进行排序? 我觉得这应该很简单,但我不知道该怎么做。我用 vim 编辑了 ~/.NERDTreeBookmarks 并看到在该文件中,书签的
输入 C-x r l 后我得到一个名为 *Bookmark List* 的缓冲区 在这个缓冲区中,我看到: Bookmark file: /tmp/bmkp-temp/19236bkt 如果我打开帮助
我的主页上有几个 iframe,每个 iframe 都是 src=""。我设置了 jquery,这样当我单击按钮时,相关 iframe 的 src 就会填充为 website.com/#title1。
我正在使用 Android 的浏览器书签 ContentProvider 以编程方式创建新书签。书签已创建(我可以通过 ContentProvider 以编程方式检索它)但书签在浏览器书签 View
rel="bookmark" 的目的是什么? 中的属性标签?例如: Click Here 它是否有任何与 SEO 或 SEM 相关的目的? 最佳答案 这没有 SEO 值(value)或目的。我相信
我目前正在开发一个基于 jQuery Mobile 的网络应用程序。我想为首次用户添加一个对话框,该对话框将提供一个按钮,单击该按钮即可将书签保存到网站。该解决方案应该适用于 iOS 和 Androi
尝试使用 chrome.bookmarks.onRemoved来自 Firefox 扩展中的 chrome.bookmarks api: chrome.bookmarks.onRemoved.addL
我要建立一个网站,并想添加一个简单的按钮,以允许访问者将我的页面添加到他们的书签/收藏夹中。有没有办法使用 javascript 来做到这一点?并且有跨浏览器的解决方案? Stack Overflow
如何为使用 AJAX 获取的页面或内容“添加书签”? 看起来如果我们只是将细节添加到“ anchor ”中,然后,使用路由甚至在 PHP 代码或 Ruby on Rails 的 route.rb 中捕
我是一名优秀的程序员,十分优秀!