c# convert pdf to image free library : Extract data from pdf file to excel Library software API .net winforms web page sharepoint print90-part2147

When aWebSocketp898
object is created, itsbinaryTypeIDL attribute must be set to the string "blobp901
". On getting, it must return the last
value it was set to. On setting, the user agent must set the IDL attribute to the new value.
Thesend(data)method transmits data using the connection. If thereadyStatep899
attribute isCONNECTINGp899
, it must throw an
"InvalidStateError"
DOMException
. Otherwise, the user agent must run the appropriate set of steps from the following list:
If the argument is a string
Ifthe WebSocket connection is establishedp58
andthe WebSocket closing handshake has not yet startedp58
, then the user agent mustsend a
WebSocket Messagep58
comprised of thedataargument using a text frame opcode; if the data cannot be sent, e.g. because it would need to
be buffered but the buffer is full, the user agent mustflag the WebSocket as fullp902
and thenclose the WebSocket connectionp58
. Any
invocation of this method with a string argument that does not throw an exception must increase thebufferedAmountp900
attribute by the
number of bytes needed to express the argument as UTF-8.[UNICODE]p1164
[ENCODING]p1160
[WSP]p1164
If the argument is aBlob
object
Ifthe WebSocket connection is establishedp58
, andthe WebSocket closing handshake has not yet startedp58
, then the user agent mustsend
a WebSocket Messagep58
comprised ofdatausing a binary frame opcode; if the data cannot be sent, e.g. because it would need to be
buffered but the buffer is full, the user agent mustflag the WebSocket as fullp902
and thenclose the WebSocket connectionp58
. The data to be
sent is the raw data represented by theBlob
object. Any invocation of this method with aBlob
argument that does not throw an exception
must increase thebufferedAmountp900
attribute by the size of theBlob
object's raw data, in bytes.[WSP]p1164
[FILEAPI]p1160
If the argument is anArrayBuffer
object
Ifthe WebSocket connection is establishedp58
, andthe WebSocket closing handshake has not yet startedp58
, then the user agent mustsend
a WebSocket Messagep58
comprised ofdatausing a binary frame opcode; if the data cannot be sent, e.g. because it would need to be
buffered but the buffer is full, the user agent mustflag the WebSocket as fullp902
and thenclose the WebSocket connectionp58
. The data to be
sent is the data stored in the buffer described by theArrayBuffer
object. Any invocation of this method with anArrayBuffer
argument
that does not throw an exception must increase thebufferedAmountp900
attribute by the length of theArrayBuffer
in bytes.[WSP]p1164
If the argument is an object that matches theArrayBufferView
type definition
Ifthe WebSocket connection is establishedp58
, andthe WebSocket closing handshake has not yet startedp58
, then the user agent mustsend
a WebSocket Messagep58
comprised ofdatausing a binary frame opcode; if the data cannot be sent, e.g. because it would need to be
buffered but the buffer is full, the user agent mustflag the WebSocket as fullp902
and thenclose the WebSocket connectionp58
. The data to be
sent is the data stored in the section of the buffer described by theArrayBuffer
object thatdatareferences. Any invocation of this method
with this kind of argument that does not throw an exception must increase thebufferedAmountp900
attribute by the length ofdata's buffer in
bytes.[WSP]p1164
The following are theevent handlersp846
(and their correspondingevent handler event typesp847
) that must be supported, asevent handler IDL
attributesp847
, by all objects implementing theWebSocketp898
interface:
Event handlerp846
Event handler event typep847
onopen
openp1155
onmessage
messagep1155
onerror
errorp1154
onclose
closep1154
Whenthe WebSocket connection is establishedp58
, the user agent mustqueue a taskp843
to run these steps:
This attribute allows authors to control how binary data is exposed to scripts. By setting the attribute to "blob", binary data is returned in
Blob
form; by setting it to "arraybuffer", it is returned inArrayBuffer
form. User agents can use this as a hint for how to handle
incoming binary data: if the attribute is set to "blobp901
", it is safe to spool it to disk, and if it is set to "arraybufferp901
", it is likely more
efficient to keep the data in memory. Naturally, user agents are encouraged to use more subtle heuristics to decide whether to keep
incoming data in memory or not, e.g. based on how big the data is or how common it is for a script to change the attribute at the last
minute. This latter aspect is important in particular because it is quite possible for the attribute to be changed after the user agent has
received the data but before the user agent has fired the event for it.
Note
9.3.3 Feedback from the protocol
901
Extract data from pdf file to excel - extract form data from PDF in C#.net, ASP.NET, MVC, Ajax, WPF
Help to Read and Extract Field Data from PDF with a Convenient C# Solution
extract pdf data to excel; export excel to pdf form
Extract data from pdf file to excel - VB.NET PDF Form Data Read library: extract form data from PDF in vb.net, ASP.NET, MVC, Ajax, WPF
Convenient VB.NET Solution to Read and Extract Field Data from PDF
online form pdf output; exporting data from excel to pdf form
1. Change thereadyStatep899
attribute's value toOPENp899
(1).
2. Change theextensionsp899
attribute's value to theextensions in usep58
, if is not the null value.[WSP]p1164
3. Change theprotocolp899
attribute's value to thesubprotocol in usep58
, if is not the null value.[WSP]p1164
4. Fire a simple eventp854
namedopenp1155
at theWebSocketp898
object.
Whena WebSocket message has been receivedp58
with typetypeand datadata, the user agent mustqueue a taskp843
to follow these steps:
[WSP]p1164
1. If thereadyStatep899
attribute's value is notOPENp899
(1), then abort these steps.
2. Leteventbe a newly createdtrustedp44
event that uses theMessageEventp887
interface, with the event typemessagep1155
, which does
not bubble, is not cancelable, and has no default action.
3. Initialiseevent'soriginp887
attribute to theUnicode serialisationp769
of theoriginp767
of theURL
that was passed to theWebSocketp898
object's constructor.
4. Iftypeindicates that the data is Text, then initialiseevent'sdatap887
attribute todata.
Iftypeindicates that the data is Binary, andbinaryTypep901
is set to "blobp901
", then initialiseevent'sdatap887
attribute to a new
Blob
object that representsdataas its raw data.[FILEAPI]p1160
Iftypeindicates that the data is Binary, andbinaryTypep901
is set to "arraybufferp901
", then initialiseevent'sdatap887
attribute to a
newArrayBuffer
object whose contents aredata.
5. Dispatchp44
eventat theWebSocketp898
object.
Whenthe WebSocket closing handshake is startedp58
, the user agent mustqueue a taskp843
to change thereadyStatep899
attribute's value to
CLOSINGp899
(2). (If theclose()p899
method was called, thereadyStatep899
attribute's value will already be set toCLOSINGp899
(2) when this
task runs.)[WSP]p1164
Whenthe WebSocket connection is closedp58
, possiblycleanly, the user agent mustqueue a taskp843
to run the following substeps:
1. Change thereadyStatep899
attribute's value toCLOSEDp899
(3).
2. If the user agent was required tofail the WebSocket connectionp58
, or if thethe WebSocket connection was closedp58
after being
flagged as full,fire a simple eventp854
namederrorat theWebSocketp898
object.[WSP]p1164
User agents are encouraged to check if they can perform the above steps efficiently before they run the task, picking tasks from othertask
queuesp842
while they prepare the buffers if not. For example, if thebinaryTypep901
attribute was set to "blobp901
" when the data arrived,
and the user agent spooled all the data to disk, but just before running the abovetaskp842
for this particular message the script switched
binaryTypep901
to "arraybufferp901
", the user agent would want to page the data back to RAM before running thistaskp842
so as to
avoid stalling the main thread while it created theArrayBuffer
object.
Note
Here is an example of how to define a handler for themessagep1155
event in the case of text frames:
mysocket.onmessage = function (event) {
if (event.data == 'on') {
turnLampOn();
} else if (event.data == 'off') {
turnLampOff();
}
};
The protocol here is a trivial one, with the server just sending "on" or "off" messages.
Example
902
C# PDF Text Extract Library: extract text content from PDF file in
Able to extract and get all and partial text content from PDF file. How to C#: Extract Text Content from PDF File. Add necessary references:
extract pdf data into excel; change font size pdf form reader
VB.NET PDF Text Extract Library: extract text content from PDF
Extract and get partial and all text content from PDF file. Extract highlighted text out of PDF document. Extract Text Content from PDF File in VB.NET.
pdf data extraction; extracting data from pdf files
3. Create atrustedp44
event that uses theCloseEventp903
interface, with the event typeclosep1154
, which does not bubble, is not
cancelable, has no default action, whosewasCleanp904
attribute is initialised to true if the connection closedcleanlyand false otherwise,
whosecodep904
attribute is initialised tothe WebSocket connection close codep58
, and whosereasonp904
attribute is initialised to the
result of applyingUTF-8 decode without BOM
tothe WebSocket connection close reasonp58
, anddispatchp44
the event at the
WebSocketp898
object.[WSP]p1164
Thetask sourcep843
for alltasksp842
queuedp843
in this section is theWebSocket task source.
The WebSocket protocol specification defines Ping and Pong frames that can be used for keep-alive, heart-beats, network status probing, latency
instrumentation, and so forth. These are not currently exposed in the API.
User agents may send ping and unsolicited pong frames as desired, for example in an attempt to maintain local network NAT mappings, to detect
failed connections, or to display latency metrics to the user. User agents must not use pings or unsolicited pongs to aid the server; it is assumed
that servers will solicit pongs whenever appropriate for the server's needs.
[Constructor(DOMString type, optional CloseEventInit
eventInitDict), Exposed=(Window,Worker)]
interface CloseEvent : Event
{
readonly attribute boolean wasClean
;
readonly attribute unsigned short code
;
readonly attribute USVString reason
;
};
dictionary CloseEventInit : EventInit
{
boolean wasClean = false;
unsigned short code = 0;
USVString reason = "";
};
User agents must not convey any failure information to scripts in a way that would allow a script to distinguish the
following situations:
• A server whose host name could not be resolved.
• A server to which packets could not successfully be routed.
• A server that refused the connection on the specified port.
• A server that failed to correctly perform a TLS handshake (e.g., the server certificate can't be verified).
• A server that did not complete the opening handshake (e.g. because it was not a WebSocket server).
• A WebSocket server that sent a correct opening handshake, but that specified options that caused the client
to drop the connection (e.g. the server specified a subprotocol that the client did not offer).
• A WebSocket server that abruptly closed the connection after successfully completing the opening
handshake.
In all of these cases, thethe WebSocket connection close codep58
would be 1006, as required by the WebSocket
Protocol specification.[WSP]p1164
Allowing a script to distinguish these cases would allow a script to probe the user's local network in preparation for an
attack.
In particular, this means the code 1015 is not used by the user agent (unless the server erroneously uses it in its
close frame, of course).
Note
⚠Warning!
IDL
9.3.4 Ping and Pong frames
9.3.5 TheCloseEventp903
interfaces
903
VB.NET Create PDF from Excel Library to convert xlsx, xls to PDF
Image: Insert Image to PDF. Image: Remove Image from PDF Page. Image: Copy, Paste, Cut Image in Page. Data: Read, Extract Field Data. Data: Auto Fill-in Field
extract data from pdf file; export pdf form data to excel
VB.NET PDF File Compress Library: Compress reduce PDF size in vb.
External cross references. Private data of other applications. Flatten visible layers. VB.NET Demo Code to Optimize An Exist PDF File in Visual C#.NET Project.
how to make a pdf form fillable in reader; save pdf forms in reader
ThewasCleanattribute must return the value it was initialised to. It represents whether the connection closed cleanly or not.
Thecodeattribute must return the value it was initialised to. It represents the WebSocket connection close code provided by the server.
Thereasonattribute must return the value it was initialised to. It represents the WebSocket connection close reason provided by the server.
AWebSocketp898
object whosereadyStatep899
attribute's value was set toCONNECTINGp899
(0) as of the last time theevent loopp842
reached
step 1p843
must not be garbage collected if there are any event listeners registered foropenp1155
events,messagep1155
events,errorp1154
events,
orclosep1154
events.
AWebSocketp898
object whosereadyStatep899
attribute's value was set toOPENp899
(1) as of the last time theevent loopp842
reachedstep 1p843
must not be garbage collected if there are any event listeners registered formessagep1155
events,errorp1154
, orclosep1154
events.
AWebSocketp898
object whosereadyStatep899
attribute's value was set toCLOSINGp899
(2) as of the last time theevent loopp842
reachedstep
1p843
must not be garbage collected if there are any event listeners registered forerrorp1154
orclosep1154
events.
AWebSocketp898
object withan established connectionp58
that has data queued to be transmitted to the network must not be garbage collected.
[WSP]p1164
If aWebSocketp898
object is garbage collected while its connection is still open, the user agent muststart the WebSocket closing handshakep58
,
with no status code for the Close message.[WSP]p1164
If a user agent is tomake disappearaWebSocketp898
object (this happens when aDocumentp103
object goes away), the user agent must follow
the first appropriate set of steps from the following list:
If the WebSocket connection is not yetestablishedp58
[WSP]p1164
Fail the WebSocket connectionp58
.[WSP]p1164
If the WebSocket closing handshake has not yet beenstartedp58
[WSP]p1164
Start the WebSocket closing handshakep58
, with the status code to use in the WebSocket Close message being 1001.[WSP]p1164
Otherwise
Do nothing.
9.4Cross-document messaging
Web browsers, for security and privacy reasons, prevent documents in different domains from affecting each other; that is, cross-site scripting is
disallowed.
While this is an important security feature, it prevents pages from different domains from communicating even when those pages are not hostile.
This section introduces a messaging system that allows documents to communicate with each other regardless of their source domain, in a way
designed to not enable cross-site scripting attacks.
Thetask sourcep843
for thetasksp842
incross-document messagingp904
is theposted message task source.
This section is non-normative.
This APIhas some privacy implicationsp31
that may not be immediately obvious.
Note
Example
9.3.6 Garbage collection
9.4.1 Introduction
Support:
Chrome
4+
Chrome for Android
50+
UC Browser for Android 9.9+
iOS Safari
3.2+
Firefox
3+
IE(limited)
8+
Opera Mini
5.0-8.0+
Android Browser
2.1+
Edge
12+
Safari
4+
Opera
9.5-9.6+
IE Mobile(limited)
10+
Source:caniuse.com
904
VB.NET PDF File Merge Library: Merge, append PDF files in vb.net
Microsoft Office Word, Excel and PowerPoint data to PDF form. Merge PDF with byte array, fields. Merge PDF without size limitation. Append one PDF file to the end
how to make pdf editable form reader; export pdf form data to excel spreadsheet
C# PDF File Merge Library: Merge, append PDF files in C#.net, ASP.
Merge Microsoft Office Word, Excel and PowerPoint data to PDF form. Append one PDF file to the end of another and save to a single PDF file.
saving pdf forms in acrobat reader; pdf data extraction open source
9.4.2.1 Authors
Authors should check theoriginp887
attribute to ensure that messages are only accepted from domains that they expect to receive messages
from. Otherwise, bugs in the author's message handling code could be exploited by hostile sites.
Furthermore, even after checking theoriginp887
attribute, authors should also check that the data in question is of the expected format.
Otherwise, if the source of the event has been attacked using a cross-site scripting flaw, further unchecked processing of information sent using the
postMessage()p906
method could result in the attack being propagated into the receiver.
Authors should not use the wildcard keyword (*) in thetargetOriginargument in messages that contain any confidential information, as otherwise
there is no way to guarantee that the message is only delivered to the recipient to which it was intended.
Authors who accept messages from any origin are encouraged to consider the risks of a denial-of-service attack. An attacker could send a high
volume of messages; if the receiving page performs expensive computation or causes network traffic to be sent for each such message, the
attacker's message could be multiplied into a denial-of-service attack. Authors are encouraged to employ rate limiting (only accepting a certain
number of messages per minute) to make such attacks impractical.
9.4.2.2 User agents
The integrity of this API is based on the inability for scripts of oneoriginp767
to post arbitrary events (usingdispatchEvent()or otherwise) to
objects in other origins (those that are not thesamep769
).
For example, if document A contains aniframep308
element that contains document B, and script in document A calls
postMessage()p906
on theWindowp758
object of document B, then a message event will be fired on that object, marked as originating
from theWindowp758
of document A. The script in document A might look like:
var o = document.getElementsByTagName('iframe')[0];
o.contentWindow.postMessage('Hello world', 'http://b.example.org/');
To register an event handler for incoming events, the script would useaddEventListener()(or similar mechanisms). For example,
the script in document B might look like:
window.addEventListener('message', receiver, false);
function receiver(e) {
if (e.origin == 'http://example.com') {
if (e.data == 'Hello world') {
e.source.postMessage('Hello', e.origin);
} else {
alert(e.data);
}
}
}
This script first checks the domain is the expected domain, and then looks at the message, which it either displays to the user, or
responds to by sending a message back to the document which sent the message in the first place.
Use of this API requires extra care to protect users from hostile entities abusing a site for their own purposes.
⚠Warning!
Implementors are urged to take extra care in the implementation of this feature. It allows authors to transmit information from one domain
to another domain, which is normally disallowed for security reasons. It also requires that UAs be careful to allow access to certain
properties but not others.
Note
9.4.2 Security
905
C# Create PDF from Excel Library to convert xlsx, xls to PDF in C#
Library. Best Microsoft Office Excel to adobe PDF file converter SDK for Visual Studio .NET. Merge all Excel sheets to one PDF file. Export
save data in pdf form reader; extract data from pdf form
C# PDF File Compress Library: Compress reduce PDF size in C#.net
All object data. File attachment. External cross references. Private data of other applications. Flatten visible layers. C#.NET DLLs: Compress PDF Document.
how to fill out pdf forms in reader; extract data from pdf forms
User agents are also encouraged to consider rate-limiting message traffic between differentoriginsp767
, to protect naïve sites from denial-of-service
attacks.
When a script invokes thepostMessage(message, targetOrigin, transfer)method on aWindowp758
object, the user agent must follow
these steps:
1. If the value of thetargetOriginargument is neither a single U+002A ASTERISK character (*), a single U+002F SOLIDUS character (/),
nor anabsolute URL
, then throw a"SyntaxError"
DOMException
and abort the overall set of steps.
2. LettargetRealmbe thisWindowp758
object'sRealmp834
.
3. LetentrySettingsbe theentry settings objectp836
.
4. LetincumbentSettingsbe theincumbent settings objectp836
.
5. LetcloneRecordbeStructuredCloneWithTransferp98
(message,transfer,targetRealm). Rethrow any exceptions.
6. Letmessage clonebecloneRecord.[[Clone]].
7. Letnew portsbe a newfrozen array
consisting of allMessagePortp910
objects incloneRecord.[[TransferList]], if any, maintaining their
relative order.
8. Return from thepostMessage()p906
method, butin parallelp42
continue running these steps.
9. If thetargetOriginargument is a single literal U+002F SOLIDUS character (/), and theDocumentp103
of theWindowp758
object on which
the method was invoked does not have thesame originp769
as theresponsible documentp828
specified byentrySettings, then abort these
steps silently.
Otherwise, if thetargetOriginargument is anabsolute URL
, and theDocumentp103
of theWindowp758
object on which the method was
invoked does not have thesame originp769
astargetOrigin, then abort these steps silently.
Otherwise, thetargetOriginargument is a single literal U+002A ASTERISK character (*), and no origin check is made.
10. Create atrustedp44
event that uses theMessageEventp887
interface, with the event typemessagep1155
, which does not bubble, is not
cancelable, and has no default action. Thedatap887
attribute must be initialised to the value ofmessage clone, theoriginp887
attribute
must be initialised to theUnicode serialisationp769
of theoriginp767
specified byincumbentSettings, thesourcep888
attribute must be
initialised to theWindowProxyp765
object corresponding to theglobal objectp834
(aWindowp758
object) specified byincumbentSettings,
and theportsp888
attribute must be initialised to thenew portsarray.
window.postMessagep906(message,targetOrigin[,transfer] )
Posts a message to the given window. Messages can be structured objects, e.g. nested objects and arrays, can contain JavaScript
values (strings, numbers,Date
objects, etc), and can contain certain data objects such asFile
Blob
,FileList
, andArrayBuffer
objects.
Objects listed intransferare transferred, not just cloned, meaning that they are no longer usable on the sending side.
If the origin of the target window doesn't match the given origin, the message is discarded, to avoid information leakage. To send the
message to the target regardless of origin, set the target origin to "*". To restrict the message to same-origin targets only, without
needing to explicitly state the origin, set the target origin to "/".
Throws a"DataCloneError"
DOMException
iftransferarray contains duplicate objects or ifmessagecould not be cloned.
Note
When posting a message to aWindowp758
of abrowsing contextp748
that has just been navigated to a newDocumentp103
is likely to result
in the message not receiving its intended recipient: the scripts in the targetbrowsing contextp748
have to have had time to set up listeners
for the messages. Thus, for instance, in situations where a message is to be sent to theWindowp758
of newly created childiframep308
,
authors are advised to have the childDocumentp103
post a message to their parent announcing their readiness to receive messages, and
for the parent to wait for this message before beginning posting messages.
Note
9.4.3 Posting messages
Spec bugs:18242
906
11. Queue a taskp843
todispatchp44
the event created in the previous step at theWindowp758
object on which the method was invoked. The
task sourcep843
for thistaskp842
is theposted message task sourcep904
.
9.5Channel messaging
This section is non-normative.
To enable independent pieces of code (e.g. running in differentbrowsing contextsp748
) to communicate directly, authors can usechannel
messagingp907
.
Communication channels in this mechanism are implemented as two-ways pipes, with a port at each end. Messages sent in one port are delivered
at the other port, and vice-versa. Messages are delivered as DOM events, without interrupting or blocking runningtasksp842
.
To create a connection (two "entangled" ports), theMessageChannel()constructor is called:
var channel = new MessageChannel();
One of the ports is kept as the local port, and the other port is sent to the remote code, e.g. usingpostMessage()p906
:
otherWindow.postMessage('hello', 'http://example.com', [channel.port2]);
To send messages, thepostMessage()p911
method on the port is used:
channel.port1.postMessage('hello');
To receive messages, one listens tomessagep1155
events:
channel.port1.onmessage = handleMessage;
function handleMessage(event) {
// message is in event.data
// ...
}
Data sent on a port can be structured data; for example here an array of strings is passed on aMessagePortp910
:
port1.postMessage(['hello', 'world']);
9.5.1.1 Examples
This section is non-normative.
In this example, two JavaScript libraries are connected to each other usingMessagePortp910
s. This allows the libraries to later be
hosted in different frames, or inWorkerp938
objects, without any change to the APIs.
<script src="contacts.js"></script> <!-- exposes a contacts object -->
<script src="compose-mail.js"></script> <!-- exposes a composer object -->
<script>
var channel = new MessageChannel();
composer.addContactsProvider(channel.port1);
contacts.registerConsumer(channel.port2);
</script>
Here's what the "addContactsProvider()" function's implementation could look like:
Example
9.5.1 Introduction
Support:
Chrome
4+
Chrome for Android
50+
UC Browser for Android 9.9+
iOS Safari
5.0-5.1+
Firefox
41+
IE
10+
Opera Mini
None
Android Browser
4.4+
Edge
12+
Safari
5+
Opera
10.6+
IE Mobile
10+
Source:caniuse.com
907
9.5.1.2 Ports as the basis of an object-capability model on the Web
This section is non-normative.
Ports can be viewed as a way to expose limited capabilities (in the object-capability model sense) to other actors in the system. This can either be a
weak capability system, where the ports are merely used as a convenient model within a particular origin, or as a strong capability model, where
they are provided by one originprovideras the only mechanism by which another originconsumercan effect change in or obtain information from
provider.
For example, consider a situation in which a social Web site embeds in oneiframep308
the user's e-mail contacts provider (an address book site,
from a second origin), and in a secondiframep308
a game (from a third origin). The outer social site and the game in the secondiframep308
cannot access anything inside the firstiframep308
; together they can only:
• Navigatep788
theiframep308
to a newURL
, such as the sameURL
but with a differentfragment
, causing theWindowp758
in the
iframep308
to receive ahashchangep1154
event.
• Resize theiframep308
, causing theWindowp758
in theiframep308
to receive aresize
event.
• Send amessagep1155
event to theWindowp758
in theiframep308
using thewindow.postMessage()p906
API.
The contacts provider can use these methods, most particularly the third one, to provide an API that can be accessed by other origins to manipulate
the user's address book. For example, it could respond to a message "add-contact Guillaume Tell <tell@pomme.example.net>" by
adding the given person and e-mail address to the user's address book.
function addContactsProvider(port) {
port.onmessage = function (event) {
switch (event.data.messageType) {
'search-result': handleSearchResult(event.data.results); break;
'search-done': handleSearchDone(); break;
'search-error': handleSearchError(event.data.message); break;
// ...
}
};
};
Alternatively, it could be implemented as follows:
function addContactsProvider(port) {
port.addEventListener('message', function (event) {
if (event.data.messageType == 'search-result')
handleSearchResult(event.data.results);
});
port.addEventListener('message', function (event) {
if (event.data.messageType == 'search-done')
handleSearchDone();
});
port.addEventListener('message', function (event) {
if (event.data.messageType == 'search-error')
handleSearchError(event.data.message);
});
// ...
port.start();
};
The key difference is that when usingaddEventListener()
, thestart()p912
method must also be invoked. When using
onmessagep912
, the call tostart()p912
is implied.
Thestart()p912
method, whether called explicitly or implicitly (by settingonmessagep912
), starts the flow of messages: messages
posted on message ports are initially paused, so that they don't get dropped on the floor before the script has had a chance to set up its
handlers.
908
To avoid any site on the Web being able to manipulate the user's contacts, the contacts provider might only allow certain trusted sites, such as the
social site, to do this.
Now suppose the game wanted to add a contact to the user's address book, and that the social site was willing to allow it to do so on its behalf,
essentially "sharing" the trust that the contacts provider had with the social site. There are several ways it could do this; most simply, it could just
proxy messages between the game site and the contacts site. However, this solution has a number of difficulties: it requires the social site to either
completely trust the game site not to abuse the privilege, or it requires that the social site verify each request to make sure it's not a request that it
doesn't want to allow (such as adding multiple contacts, reading the contacts, or deleting them); it also requires some additional complexity if there's
ever the possibility of multiple games simultaneously trying to interact with the contacts provider.
Using message channels andMessagePortp910
objects, however, all of these problems can go away. When the game tells the social site that it
wants to add a contact, the social site can ask the contacts provider not for it to add a contact, but for thecapabilityto add a single contact. The
contacts provider then creates a pair ofMessagePortp910
objects, and sends one of them back to the social site, who forwards it on to the game.
The game and the contacts provider then have a direct connection, and the contacts provider knows to only honor a single "add contact" request,
nothing else. In other words, the game has been granted the capability to add a single contact.
9.5.1.3 Ports as the basis of abstracting out service implementations
This section is non-normative.
Continuing the example from the previous section, consider the contacts provider in particular. While an initial implementation might have simply
usedXMLHttpRequest
objects in the service'siframep308
, an evolution of the service might instead want to use ashared workerp939
with a single
WebSocketp898
connection.
If the initial design usedMessagePortp910
objects to grant capabilities, or even just to allow multiple simultaneous independent sessions, the
service implementation can switch from theXMLHttpRequest
s-in-each-iframep308
model to the shared-WebSocketp898
model without changing
the API at all: the ports on the service provider side can all be forwarded to the shared worker without it affecting the users of the API in the
slightest.
[Constructor
, Exposed=(Window,Worker)]
interface MessageChannel {
readonly attribute MessagePort
port1
;
readonly attribute MessagePort
port2
;
};
When theMessageChannel()constructor is called, it must run the following algorithm:
1. Create a newMessagePortobjectp911
whoseownerp910
is theincumbent settings objectp836
, and letport1be that object.
2. Create a newMessagePortobjectp911
whoseownerp910
is theincumbent settings objectp836
, and letport2be that object.
3. Entanglep911
theport1andport2objects.
channel= newMessageChannelp909()
Returns a newMessageChannelp909
object with two newMessagePortp910
objects.
channel.port1p910
Returns the firstMessagePortp910
object.
channel.port2p910
Returns the secondMessagePortp910
object.
Note
IDL
9.5.2 Message channels
909
4. Instantiate a newMessageChannelp909
object, and letchannelbe that object.
5. Let theport1p910
attribute of thechannelobject beport1.
6. Let theport2p910
attribute of thechannelobject beport2.
7. Returnchannel.
Theport1andport2attributes must return the values they were assigned when theMessageChannelp909
object was created.
Each channel has two message ports. Data sent through one port is received by the other port, and vice versa.
[Exposed=(Window,Worker)]
interface MessagePort : EventTarget
{
void postMessage
(any message, optional sequence<object
> transfer = []);
void start
();
void close
();
// event handlers
attribute EventHandler
onmessage
;
};
EachMessagePortp910
object can be entangled with another (a symmetric relationship). EachMessagePortp910
object also has atask sourcep843
called theport message queue, initially empty. Aport message queuep910
can be enabled or disabled, and is initially disabled. Once enabled, a
port can never be disabled again (though messages in the queue can get moved to another queue or removed altogether, which has much the
same effect). AMessagePortp910
also has ahas been shippedflag, which must initially be false, and anowner, which is asettings objectp827
set
when the object is created, as described below.
When a port'sport message queuep910
is enabled, theevent loopp842
must use it as one of itstask sourcesp843
. When a port'sownerp910
specifies a
responsible event loopp828
that is abrowsing contextp748
event loopp842
, alltasksp842
queuedp843
on itsport message queuep910
must be associated
with theresponsible documentp828
specified by the port'sownerp910
.
Eachevent loopp842
has atask sourcep843
called theunshipped port message queue. This is a virtualtask sourcep843
: it must act as if it contained
thetasksp842
of eachport message queuep910
of eachMessagePortp910
whosehas been shippedp910
flag is false, whoseport message queuep910
is enabled, and whoseownerp910
specifies thatevent loopp842
as theresponsible event loopp828
, in the order in which they were added to their
respectivetask sourcep843
. When ataskp842
would be removed from theunshipped port message queuep910
, it must instead be removed from itsport
message queuep910
.
port.postMessagep911(message[,transfer] )
Posts a message through the channel. Objects listed intransferare transferred, not just cloned, meaning that they are no longer usable
on the sending side.
Throws a"DataCloneError"
DOMException
iftransferarray contains duplicate objects or the source or target ports, or ifmessage
could not be cloned.
port.startp912()
Begins dispatching messages received on the port.
port.closep912()
Disconnects the port, so that it is no longer active.
Note
If the port'sownerp910
specifies aresponsible documentp828
that isfully activep749
, but the event listeners all have scripts whosesettings
objectsp827
specifyresponsible documentsp828
that arenotfully activep749
, then the messages will be lost.
Note
IDL
9.5.3 Message ports
Spec bugs:28813
910
Documents you may be interested
Documents you may be interested