gpt4 book ai didi

angularjs - Angular 表达式在 Chrome 扩展中计算,但在 Edge 扩展中不计算

转载 作者:行者123 更新时间:2023-12-03 06:36:19 26 4
gpt4 key购买 nike

我有一个简单的浏览器扩展,使用 Angular (v1.6.3),但浏览器扩展的弹出窗口中的 Angular 表达式无法在 Edge 中计算,但在 Chrome 中却可以。

Angular 表达式很简单 <div>{{2+2}}</div> .

当我浏览到相关网站(如 manifest file 中配置的那样,即 http://marketplace.visualstudio.comhttps://marketplace.visualstudio.comhttp://www.bbc.com ,并单击扩展按钮时,Chrome 会将 html 输出评估为“4”,但 Edge将 html 输出计算为“{{2+2}}”。

Chrome 示例

Chrome as a browser extension

边缘示例

Edge as a browser extension

我相信 html 和 Angular 交互本身从根本上来说是合理的,因为当我直接浏览到 pop up page 时,使用诸如 file:///C:/temp/app/popup.html 之类的 URL ,Chrome 和 Edge 都正确计算表达式 {{2+2}}到“4”。

直接浏览到 popup.html 时的 Chrome 示例

Chrome direct browse to popup.html

直接浏览到 popup.html 时的 Edge 示例

Edge direct browse to popup.html

总而言之,只有作为 Edge 扩展时,表达式计算才会失败;作为 Chrome 扩展程序或在 Edge 和 Chrome 中直接浏览,它都可以工作。

YouTube 上的三十秒视频演示: YouTube demo

我已将完整版源代码放在GitHub上但代码非常简单,由以下内容组成:

一个popup.html弹出窗口的文件页面,其中包含 Angular 表达式:

<html>
<head>
<script type="text/javascript" src="scripts/angular.min.js"></script>
<script type="text/javascript" src="scripts/app.js"></script>
</head>
<body>
<div ng-app="myApp">
<div>{{2+2}}</div>
</div>
</body>
</html>

app.js文件定义 Angular 模块:

var myApp = angular.module('myApp', []);

一个contentscript.js告诉网站打开弹出窗口:

// Set the window object for multiple browser compatibility
window.browser = (function () {
return window.msBrowser ||
window.browser ||
window.chrome;
})();

window.browser.runtime.sendMessage({ action: "openPopUp" });

一个background.js实际打开 popup.html 的脚本文件:

// Set the window object for multiple browser compatibility
window.browser = (function () {
return window.msBrowser ||
window.browser ||
window.chrome;
})();

window.browser.runtime.onMessage.addListener(
function (request, sender, sendResponse) {
if (request.action == "openPopUp") {
window.browser.tabs.query({ active: true, currentWindow: true },
function (tabs) {
window.browser.pageAction.show(tabs[0].id);
});
}
});

最后是 manifest.json将所有内容连接在一起的文件,两个浏览器都可以理解:

{
"manifest_version": 2,
"name": "BrowserExtensionUsingAngularWorksChromeNotEdge",
"version": "1.0.0",
"author": "Greg Trevellick",
"page_action": {
"default_icon": {
"19": "icon_19x19.png"
},
"default_popup": "popup.html"
},
"background": {
"scripts": [ "scripts/background.js" ],
"persistent": false
},
"content_scripts": [
{
"matches": [
"http://marketplace.visualstudio.com/*",
"https://marketplace.visualstudio.com/*",
"http://www.bbc.co.uk/*"
],
"js": [
"scripts/contentscript.js",
"scripts/angular.min.js"
]
}
],
"permissions": [
"activeTab",
"declarativeContent",
"http://marketplace.visualstudio.com/",
"https://marketplace.visualstudio.com/",
"http://www.bbc.co.uk/"
],
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
}

无论如何,可以在 here 找到一些有关 Chrome 扩展程序入门的说明。对于 Edge here .

最佳答案

unsafe-eval 现在在 Microsoft Edge 扩展中不受支持,您可能需要使用类似问题 AngularJS uses eval in chrome extension 中提到的一些解决方法

来自Supported manifest keys

Microsoft Edge extensions currently only support Default Policy Restrictions: script-src 'self'; object-src 'self'

关于angularjs - Angular 表达式在 Chrome 扩展中计算,但在 Edge 扩展中不计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43775016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com