BackgroundHTMLParser::updateDocument里会
Platform::current()->mainThread()->postTask(FROM_HERE,
threadSafeBind(&HTMLDocumentParser::didReceiveEncodingDataFromBackgroundParser, AllowCrossThreadAccess(m_parser), encodingData));
发一个编码名字给主线程,但如果主线程过快的收到资源接收完成的消息:
> node.dll!blink::HTMLDocumentParser::stopBackgroundParser() 行 805
C++
node.dll!blink::HTMLDocumentParser::end() 行 859
C++
node.dll!blink::HTMLDocumentParser::attemptToRunDeferredScriptsAndEnd() 行 873
C++
node.dll!blink::HTMLDocumentParser::prepareToStopParsing() 行 273
C++
node.dll!blink::HTMLDocumentParser::processParsedChunkFromBackgroundParser(WTF::PassOwnPtr<blink::HTMLDocumentParser::ParsedChunk> popChunk) 行 511
C++
node.dll!blink::HTMLDocumentParser::pumpPendingSpeculations() 行 563
C++
node.dll!blink::HTMLDocumentParser::resumeParsingAfterScriptExecution() 行 1000
C++
node.dll!blink::HTMLDocumentParser::notifyScriptLoaded(blink::Resource * cachedResource) 行 1036
C++
node.dll!blink::HTMLScriptRunner::notifyFinished(blink::Resource * cachedResource) 行 200
C++
node.dll!blink::Resource::checkNotify() 行 253
C++
node.dll!blink::Resource::finishOnePart() 行 305
C++
node.dll!blink::Resource::finish() 行 312
C++
node.dll!blink::ResourceLoader::didFinishLoading(blink::WebURLLoader * __formal, double finishTime, __int64 encodedDataLength) 行 476
C++
node.dll!net::WebURLLoaderManager::handleDidFinishLoading(net::WebURLLoaderInternal * job, double finishTime, __int64 totalEncodedDataLength) 行 471
C++
就会关掉这个BackgroundHTMLParser,导致这个HTMLDocumentParser::didReceiveEncodingDataFromBackgroundParser,收不到,从而发生乱码
探讨了在HTML解析过程中,背景解析器向主线程发送编码名称时可能遇到的问题,尤其是在主线程快速接收资源完成消息的情况下,可能导致乱码现象。
2366

被折叠的 条评论
为什么被折叠?



