在 Power BI 中隐藏徽标栏
Hide the logoBar in power BI
是否可以在网页发布报表后隐藏或不显示power BI的这个logoBar?
谢谢。
您提到的徽标栏是 Power BI 中 'Publish to Web' 功能的一部分,也称为 'Anonymous Embedding'。
这是 Power BI 用来显示报表来源的一种水印。
这是不可移除的,因为 'Publish to Web' 是一项不适用于高级 Power BI 用户的功能。
如果您想在不显示徽标栏的情况下显示报告,我建议您使用 Power BI 嵌入:
https://powerbi.microsoft.com/en-us/power-bi-embedded/
徽标栏仅在您在网络上发布报告时显示。切换到高级 Power BI 用户以摆脱它。
Power BI Embedding 是备选方案。
我找到了一个方法:我创建了一个背景为白色、高度为 10px 的 <div>
并将其翻译到它隐藏了 Power BI 徽标。
不要忘记将其 z-index
设置为 1000
.hider {
z-index: 1000;
height: 40px;
transform: translateY(-80px);
background-color: white;
}
另一种方法是使用反向代理,您可以在其中使用一些样式来隐藏栏。我已经通过 Cloudflare Workers 成功实现了这一目标。
这种方法的另一个好处是您可以从自己的自定义域中显示仪表板。
您将需要一个 Cloudflare 帐户,您可以在其中使用以下脚本配置工作人员。如果您将 Cloudflare 设置为您的名称服务器,那么您可以使用您的域名在工作人员上进行自定义重定向。
const upstream = 'app.powerbi.com'
const upstream_path = '/'
// Whether to use HTTPS protocol for upstream address.
const https = true
// Whether to disable cache.
const disable_cache = true
addEventListener('fetch', event => {
event.respondWith(fetchAndApply(event.request));
})
class RemoveElement {
element(element) {
element.append(`
<style>
.embeddedLandingRootContentLogoVisible { height: 100% }
.logoBarWrapper { display: none }
</style>
`, { html: Boolean })
console.log(`Incoming element: ${element.tagName}`)
}
}
async function fetchAndApply(request) {
const region = request.headers.get('cf-ipcountry').toUpperCase();
const ip_address = request.headers.get('cf-connecting-ip');
const user_agent = request.headers.get('user-agent');
let response = null;
let url = new URL(request.url);
let url_hostname = url.hostname;
if (https == true) {
url.protocol = 'https:';
} else {
url.protocol = 'http:';
}
var upstream_domain = upstream;
url.host = upstream_domain;
if (url.pathname == '/') {
url.pathname = upstream_path;
} else {
url.pathname = upstream_path + url.pathname;
}
let method = request.method;
let request_headers = request.headers;
let new_request_headers = new Headers(request_headers);
new_request_headers.set('Host', upstream_domain);
new_request_headers.set('Referer', url.protocol + '//' + url_hostname);
let original_response = await fetch(url.href, {
method: method,
headers: new_request_headers
})
response = new Response(original_response.body, original_response)
let original_text = null;
let response_headers = original_response.headers;
let new_response_headers = new Headers(response_headers);
let status = original_response.status;
if (disable_cache) {
new_response_headers.set('Cache-Control', 'no-store');
}
new_response_headers.set('access-control-allow-origin', '*');
new_response_headers.set('access-control-allow-credentials', true);
new_response_headers.delete('content-security-policy');
new_response_headers.delete('content-security-policy-report-only');
new_response_headers.delete('clear-site-data');
if (new_response_headers.get("x-pjax-url")) {
new_response_headers.set("x-pjax-url", response_headers.get("x-pjax-url").replace("//" + upstream_domain, "//" + url_hostname));
}
return new HTMLRewriter().on('body', new RemoveElement()).transform(response);
}
那么新报告的嵌入 URL 将是您的自定义域 + 来自原始嵌入 URL 报告的查询字符串。
我已经创建了一个存储库,其中包含有关此方法的更多说明。
https://github.com/Hugoberry/PowerBI-nologo-proxy
是的。通过在 Iframe 元素标记上添加一些样式。
style="position:absolute; clip:rect(0px,1150px,500px,0px);width:100%"
是否可以在网页发布报表后隐藏或不显示power BI的这个logoBar?
谢谢。
您提到的徽标栏是 Power BI 中 'Publish to Web' 功能的一部分,也称为 'Anonymous Embedding'。 这是 Power BI 用来显示报表来源的一种水印。 这是不可移除的,因为 'Publish to Web' 是一项不适用于高级 Power BI 用户的功能。
如果您想在不显示徽标栏的情况下显示报告,我建议您使用 Power BI 嵌入: https://powerbi.microsoft.com/en-us/power-bi-embedded/
徽标栏仅在您在网络上发布报告时显示。切换到高级 Power BI 用户以摆脱它。 Power BI Embedding 是备选方案。
我找到了一个方法:我创建了一个背景为白色、高度为 10px 的 <div>
并将其翻译到它隐藏了 Power BI 徽标。
不要忘记将其 z-index
设置为 1000
.hider {
z-index: 1000;
height: 40px;
transform: translateY(-80px);
background-color: white;
}
另一种方法是使用反向代理,您可以在其中使用一些样式来隐藏栏。我已经通过 Cloudflare Workers 成功实现了这一目标。
这种方法的另一个好处是您可以从自己的自定义域中显示仪表板。
您将需要一个 Cloudflare 帐户,您可以在其中使用以下脚本配置工作人员。如果您将 Cloudflare 设置为您的名称服务器,那么您可以使用您的域名在工作人员上进行自定义重定向。
const upstream = 'app.powerbi.com'
const upstream_path = '/'
// Whether to use HTTPS protocol for upstream address.
const https = true
// Whether to disable cache.
const disable_cache = true
addEventListener('fetch', event => {
event.respondWith(fetchAndApply(event.request));
})
class RemoveElement {
element(element) {
element.append(`
<style>
.embeddedLandingRootContentLogoVisible { height: 100% }
.logoBarWrapper { display: none }
</style>
`, { html: Boolean })
console.log(`Incoming element: ${element.tagName}`)
}
}
async function fetchAndApply(request) {
const region = request.headers.get('cf-ipcountry').toUpperCase();
const ip_address = request.headers.get('cf-connecting-ip');
const user_agent = request.headers.get('user-agent');
let response = null;
let url = new URL(request.url);
let url_hostname = url.hostname;
if (https == true) {
url.protocol = 'https:';
} else {
url.protocol = 'http:';
}
var upstream_domain = upstream;
url.host = upstream_domain;
if (url.pathname == '/') {
url.pathname = upstream_path;
} else {
url.pathname = upstream_path + url.pathname;
}
let method = request.method;
let request_headers = request.headers;
let new_request_headers = new Headers(request_headers);
new_request_headers.set('Host', upstream_domain);
new_request_headers.set('Referer', url.protocol + '//' + url_hostname);
let original_response = await fetch(url.href, {
method: method,
headers: new_request_headers
})
response = new Response(original_response.body, original_response)
let original_text = null;
let response_headers = original_response.headers;
let new_response_headers = new Headers(response_headers);
let status = original_response.status;
if (disable_cache) {
new_response_headers.set('Cache-Control', 'no-store');
}
new_response_headers.set('access-control-allow-origin', '*');
new_response_headers.set('access-control-allow-credentials', true);
new_response_headers.delete('content-security-policy');
new_response_headers.delete('content-security-policy-report-only');
new_response_headers.delete('clear-site-data');
if (new_response_headers.get("x-pjax-url")) {
new_response_headers.set("x-pjax-url", response_headers.get("x-pjax-url").replace("//" + upstream_domain, "//" + url_hostname));
}
return new HTMLRewriter().on('body', new RemoveElement()).transform(response);
}
那么新报告的嵌入 URL 将是您的自定义域 + 来自原始嵌入 URL 报告的查询字符串。
我已经创建了一个存储库,其中包含有关此方法的更多说明。 https://github.com/Hugoberry/PowerBI-nologo-proxy
是的。通过在 Iframe 元素标记上添加一些样式。
style="position:absolute; clip:rect(0px,1150px,500px,0px);width:100%"