EMASCurlWeb/cookie.js (32 lines of code) (raw):
;(function () {
// 用于兼容不同环境
var originalCookieSetter = document.__lookupSetter__ && document.__lookupSetter__("cookie");
var originalCookieGetter = document.__lookupGetter__ && document.__lookupGetter__("cookie");
// 通知原生环境同步
function syncCookieToNative(cookieStr) {
var message = {
cookie: cookieStr,
url: document.location.href
};
if (window.webkit && window.webkit.messageHandlers &&
window.webkit.messageHandlers.EMASCurlWebMessageHandler &&
window.webkit.messageHandlers.EMASCurlWebMessageHandler.postMessage) {
window.webkit.messageHandlers.EMASCurlWebMessageHandler.postMessage({
method: "syncCookie",
params: message
});
}
}
// 若原生 setter/getter 存在,直接覆盖
if (originalCookieSetter && originalCookieGetter) {
Object.defineProperty(document, "cookie", {
set: function (cookieStr) {
if (typeof cookieStr !== "string") return;
syncCookieToNative(cookieStr);
originalCookieSetter.call(document, cookieStr);
},
get: function () {
return originalCookieGetter.call(document);
},
configurable: false
});
return;
}
})();