feat: support css origin in frame.insertCSS (#19268)
* feat: support css origin in frame.insertCSS * move cssOrigin to an options object
This commit is contained in:
parent
e510816cf6
commit
3ee95cf0e8
2 changed files with 34 additions and 6 deletions
|
@ -987,13 +987,13 @@ Returns `String` - The user agent for this web page.
|
||||||
|
|
||||||
**[Deprecated](modernization/property-updates.md)**
|
**[Deprecated](modernization/property-updates.md)**
|
||||||
|
|
||||||
#### `contents.insertCSS(css)`
|
#### `contents.insertCSS(css[, options])`
|
||||||
|
|
||||||
* `css` String
|
* `css` String
|
||||||
|
* `options` Object (optional)
|
||||||
|
* `cssOrigin` String (optional) - Can be either 'user' or 'author'; Specifying 'user' enables you to prevent websites from overriding the CSS you insert. Default is 'author'.
|
||||||
|
|
||||||
Returns `Promise<String>` - A promise that resolves with a key for the inserted
|
Returns `Promise<String>` - A promise that resolves with a key for the inserted CSS that can later be used to remove the CSS via `contents.removeInsertedCSS(key)`.
|
||||||
CSS that can later be used to remove the CSS via
|
|
||||||
`contents.removeInsertedCSS(key)`.
|
|
||||||
|
|
||||||
Injects CSS into the current web page and returns a unique key for the inserted
|
Injects CSS into the current web page and returns a unique key for the inserted
|
||||||
stylesheet.
|
stylesheet.
|
||||||
|
|
|
@ -61,6 +61,25 @@ struct Converter<blink::WebLocalFrame::ScriptExecutionType> {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct Converter<blink::WebDocument::CSSOrigin> {
|
||||||
|
static bool FromV8(v8::Isolate* isolate,
|
||||||
|
v8::Local<v8::Value> val,
|
||||||
|
blink::WebDocument::CSSOrigin* out) {
|
||||||
|
std::string css_origin;
|
||||||
|
if (!ConvertFromV8(isolate, val, &css_origin))
|
||||||
|
return false;
|
||||||
|
if (css_origin == "user") {
|
||||||
|
*out = blink::WebDocument::CSSOrigin::kUserOrigin;
|
||||||
|
} else if (css_origin == "author") {
|
||||||
|
*out = blink::WebDocument::CSSOrigin::kAuthorOrigin;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace mate
|
} // namespace mate
|
||||||
|
|
||||||
namespace electron {
|
namespace electron {
|
||||||
|
@ -325,12 +344,21 @@ void InsertText(v8::Local<v8::Value> window, const std::string& text) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
base::string16 InsertCSS(v8::Local<v8::Value> window, const std::string& css) {
|
base::string16 InsertCSS(v8::Local<v8::Value> window,
|
||||||
|
const std::string& css,
|
||||||
|
mate::Arguments* args) {
|
||||||
|
blink::WebDocument::CSSOrigin css_origin =
|
||||||
|
blink::WebDocument::CSSOrigin::kAuthorOrigin;
|
||||||
|
|
||||||
|
mate::Dictionary options;
|
||||||
|
if (args->GetNext(&options))
|
||||||
|
options.Get("cssOrigin", &css_origin);
|
||||||
|
|
||||||
blink::WebFrame* web_frame = GetRenderFrame(window)->GetWebFrame();
|
blink::WebFrame* web_frame = GetRenderFrame(window)->GetWebFrame();
|
||||||
if (web_frame->IsWebLocalFrame()) {
|
if (web_frame->IsWebLocalFrame()) {
|
||||||
return web_frame->ToWebLocalFrame()
|
return web_frame->ToWebLocalFrame()
|
||||||
->GetDocument()
|
->GetDocument()
|
||||||
.InsertStyleSheet(blink::WebString::FromUTF8(css))
|
.InsertStyleSheet(blink::WebString::FromUTF8(css), nullptr, css_origin)
|
||||||
.Utf16();
|
.Utf16();
|
||||||
}
|
}
|
||||||
return base::string16();
|
return base::string16();
|
||||||
|
|
Loading…
Reference in a new issue