工具/软件:TI-RTOS
您好!
我面临着 Safari 的新问题。
我实现了一个网页、以使用自定义令牌配置一些参数(配置存储在闪存中、以便在重新启动之间保持不变)。
如果我在 Windows 上使用 Google Chrome (64+)或 Firefox (58+)或 Mac 上使用 Firefox (58+)来访问我的页面并填充配置、一切都正常。
但是、如果我尝试在 MacOSX Sierra 和 iPhone 7上使用 Safari 10、当我单击应用时、页面会重新加载、但配置未更改。
我放置了一些调试代码、使用 Safari 时似乎未调用 SimpleLinkHttpServerEventHandler (sl_NetApp_EVENT_HTTP_TOKEN_POST 事件未触发)。
调用 SimpleLinkNetAppRequestEventHandler。
我依赖第一个保存已发布配置、而第二个则是发送元数据、将浏览器重定向到另一个页面。
我感到困惑的是、使用 Safari、我可以使用标准 ROM 配置页面(它可以正常工作)配置器件、并且我尝试在我自己的页面中复制相同的架构、其中使用几个用户令牌__sl_P_Uxx 来管理配置。
Get 替代有效(当我加载页面时、自定义令牌在 SimpleLinkHttpServerEventHandler 中被替换、因此会触发 SL_NetApp_EVENT_HTTP_TOKEN_Get)。
但 Safari 的行为就好像它没有发布任何内容一样、我检查了两次 HTML、(因为它使用我的令牌)它与内置 ROM 配置相同。
正如我说过的、探测只影响非常奇怪的 Safari。
下面是我对 SimpleLinkNetAppRequestEventHandler 中的 POST 事件的响应:
案例 SL_NetApp_Request_HTTP_POST: { pNetAppResponse->Status = SL_NetApp_HTTP_RESPONSE_302_MOVE_APTERY; pNetAppResponse->ResponseData.MetadataLen = preparePostMetadata (pMetadata); pNetAppResponse->ResponseData.pMetadata = pMetadata; pNetAppResponse->ResponseData.pPayload =空; pNetAppResponse->ResponseData.PayloadLen = 0; pNetAppResponse->ResponseData.Flags = 0; } 中断;
下面是 preparePostMetadata 函数:
uint16_t preparePostMetadata (char* pMetadata) { /* http 状态*/ char* qMetadata = pMetadata; //类型 * qMetadata =(uint8_t) sl_netapp_request_metadata_type_status; qMetadata++; //长度 *(uint16_t *) qMetadata =(uint16_t) 2; qMetadata+=2; //值 *(uint16_t *) qMetadata =(uint16_t) sl_NetApp_HTTP_RESPONSE_302_MOVE_TEMPRATICE_TEMPRAT= /*不需要内容,因此浏览器将保持在同一页上*/ qMetadata+=2; /*位置*/ //类型 * qMetadata =(uint8_t) sl_netapp_request_metadata_type_http_location; qMetadata++; //长度 //char* newaddr ="192.168.1.235:443/MQTT.html"; char* newaddr ="/mqtp.html"; *(uint16_t *) qMetadata =(uint16_t) strlen (newaddr); qMetadata+=2; //值 memcpy (qMetadata、newaddr、strlen (newaddr)); qMetadata+= strlen (newaddr); 返回 qMetadata - pMetadata; }