gpt4 book ai didi

javascript - 加载弹出页面时在 chrome 扩展弹出页面中调用 Angular 方法?

转载 作者:太空宇宙 更新时间:2023-11-04 13:22:12 25 4
gpt4 key购买 nike

我正在编写一个 chrome 扩展,它使用 angularjs 从 API 获取 JSON 响应。下面的页面是扩展的弹出窗口。目前有一种形式调用 Angular Controller 中的方法以从 API 获取 JSON,但是我希望在打开弹出窗口时调用它。我已经尝试了很多事情来让它工作但失败了。如果有人知道实现我想要的目标需要什么,我想要一些指导。

谢谢。

这是我的代码。

我这样声明我的应用

var extension = angular.module('StackAPI',['ngResource']);

在我的 Controller 文件中,我有以下内容。

extension.controller('StackAPICtrl', function ($scope, $resource) {

$scope.stackAPI = $resource('http://*/question/params?questionId=:questionId',
{port:'80', questionId:'', callback:'JSON_CALLBACK'},
{get:{method:'JSONP'}});
$scope.doSearch = function () {
$scope.soResult = $scope.stackAPI.get({questionId:$scope.search});
}
});

我的 html 弹出页面看起来像这样

带有 ng-submit="doSearch()" 的表单是当前调用 Angular Controller 中的方法的内容。我希望在打开扩展弹出页面时调用此方法 doSearch()

<!DOCTYPE html>
<html ng-app="StackAPI" ng-csp>
<head>
<title>Test</title>
<script type="text/javascript" src="/js/angular.min.js"></script>
<script type="text/javascript" src="/js/angular-resource.min.js"></script>
<script type="text/javascript" src="/js/extension.js"></script>
<script type="text/javascript" src="/js/query.js"></script>
<link rel="stylesheet" type="text/css" href="/css/all.css" media="screen"/>
</head>
<body>
<div ng-controller="StackAPICtrl">

<form align="left" ng-submit="doSearch()">
<input id="input" type="text" placeholder="Enter a question id..." ng-model="search" size="115">
</form>

<div class="container">
<div ng-repeat="answer in soResult.answers">
<div id="answer-{{answer.answer_id}}" class="answer" data-answerid={{answer.answer_id}}>
<table>
<tr>
<td class="votecell">
<div class="vote">
<span class="vote-count-post " title="up-ranked">
<img src="/images/arrow.png" alt="arrow" height="64" width="64">
</span>
</div>
</td>
<td class="answercell" align="left">
<div class="post-text" ng-bind-html-unsafe="answer.body">

</div>
<table class="fw">
<tr>
<td class="vt">
<div class="post-menu">
<a class="short-link">share</a>
<span class="lsep">|</span>
<a class="suggest-edit-post" title="revise and improve this post">edit</a>
</div>
</td>
<td align="right" class="post-signature">
<div class="user-info ">
<div class="user-action-time">answered {{answer.creation_date}}
<span title="2013-02-22 23:12:55Z" class="relativetime"></span>
</div>
<div class="user-gravatar32">
<!-- ${profile_picture} -->
<img src="{{answer.owner.profile_image}}"
alt="" width="32" height="32">
</div>
<!-- users details stuff here -->
<div class="user-details">
<!-- ${name} -->
<a>{{answer.owner.display_name}}</a><br>
<span class="reputation-score" title="reputation score" dir="ltr">
<!-- ${reputation} -->
{{answer.owner.reputation}}
</span>
</div>
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</body>
</html>

最佳答案

事实证明,由于 chrome 的内容安全策略 (CSP),我当前的设置无法实现我正在做的事情。我创建的 API 目前仅服务于 http,这就是问题所在。 doSearch() 方法调用已使用我的 http API 初始化的 ngResource,由于 CSP,它只能在 list 文件中定义的沙箱中运行。沙盒意味着扩展的其他部分不能与沙盒中运行的任何东西进行交互,因此我不能以我想要的方式调用 doSearch() 方法。

此问题的解决方案 - 我必须配置 tomcat 以通过 https 为 API 提供服务,一旦源 uri 在 list 文件中说明,CSP 就允许这样做。

关于javascript - 加载弹出页面时在 chrome 扩展弹出页面中调用 Angular 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15362225/

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