今日长缨在手,何时缚住苍龙。这篇文章主要讲述使用Google Apps脚本搜索无结果相关的知识,希望能为你提供帮助。
我是在Google Apps脚本中编写的,目的是允许我在Google文档中为youtube打开弹出播放器。其他文件运行正常,但这不行
【使用Google Apps脚本搜索无结果】问题是搜索引擎和用户界面似乎可以正常工作,但是无论等待多长时间,搜索都不会得到结果。如果有人能指出我的错误并告诉我如何解决,那就太好了。
function embed(cacheKey, resourceId, resourceType) {
const progress = document.querySelector("#progress");
progress.style.display = "block";
console.log(cacheKey, resourceId, resourceType);
var text;
let checked = document.querySelector('input[type="radio"]:checked').value;
if (checked === 'string') {
text = document.querySelector('input[name="link-text"]').value;
}
let prefs = {
"type": checked,
"string": text
};
google.script.run.withSuccessHandler(function(data) {
if (data.success) {
document.querySelector('#result').innerText = "Video linked!";
setTimeout(function() {
document.querySelector('#result').innerText = "";
}, 3000);
}
if (data.type === "copy" &
&
data.url) {
navigator.permissions.query({
name: "clipboard-write"
}).then(result =>
{
if (result.state == "granted" || result.state == "prompt") {
navigator.clipboard.writeText(data.url);
alert('URL copied to clipboard');
}
});
}
progress.style.display = "none";
}).DTApi('DT', 'embed', cacheKey, prefs, resourceId, resourceType);
}
function previewEmbed(cacheKey, resourceId, resourceType) {
const progress = document.querySelector("#progress");
progress.style.display = "block";
console.log(cacheKey, resourceId, resourceType);
google.script.run.withSuccessHandler(function(result) {
let container = document.querySelector("#preview");
let data = https://www.songbingjia.com/android/JSON.parse(result);
console.log(data)
console.log('Trying to preview: ' + Object.keys(data))
let settings = function(id, title) {
const template = "<
div class='settings'>
<
h2>
Settings<
/h2>
<
p>
How do you want to link your video?<
/p>
<
input type='radio' id='copy-radio' name='embed-type' value='https://www.songbingjia.com/android/copy' />
<
label for='copy-radio'>
Copy link to clipboard<
/label/>
<
br />
<
input type='radio' id='thumbnail-radio' name='embed-type' value='https://www.songbingjia.com/android/thumbnail' />
<
label for='thumbnail-radio'>
Thumbnail<
/label>
<
br />
<
input type='radio' id='toggle' name='embed-type' value='https://www.songbingjia.com/android/string' />
<
label for='toggle'>
Text<
/label>
<
input type='text' id='link-text' name='link-text' value='" + title + "' />
<
div id='settings-action'>
<
button class='action' onclick='embed(this.parentNode.parentNode.parentNode.dataset.cachekey, this.parentNode.parentNode.parentNode.dataset.resourceid, this.parentNode.parentNode.parentNode.dataset.resourcetype)'>
Get Video<
/button>
<
button onclick='this.parentNode.parentNode.parentNode.parentNode.removeChild(this.parentNode.parentNode.parentNode)'>
Close<
/button>
<
div id='result'>
<
/div>
<
/div>
<
/div>
";
return template;
}
let previewContainer = document.createElement('div');
previewContainer.setAttribute('class', 'preview-container');
previewContainer.dataset.resourceid = data.resourceId;
previewContainer.dataset.resourcetype = data.resourceType;
previewContainer.dataset.cachekey = data.cacheKey;
if (data.resourceType === "channel") {
previewContainer.innerhtml = '<
img src="' + data.preview.high.url + '" />
';
} else {
previewContainer.innerHTML = data.preview.items[0].player.embedHtml;
}
container.appendChild(previewContainer);
previewContainer.insertAdjacentHTML('beforeend', settings(data.id, data.title));
progress.style.display = "none";
window.scroll({
top: 0,
left: 0,
behavior: 'smooth'
});
}).DTApi('DT', 'preview', cacheKey, resourceId, resourceType);
}
function search(page, key) {
const progress = document.querySelector("#progress");
progress.style.display = "block";
// If there's a page token, set it
var pageToken = page || "";
var key = key || "";
let term = document.querySelector('#search-input').value;
let checked = document.querySelectorAll('input[name="queryArg"]:checked');
let prev = document.querySelector("#prev");
let next = document.querySelector("#next");
let total = document.querySelector("#total-results");
// Get the checked search types
let args = {};
args.types = [];
// TODO: Validate that there is at least _one_ checked box
// Default to videos
checked.forEach(function(el) {
args.types.push(el.value);
});
args.pageToken = page;
args.key = key;
const container = document.querySelector('#search-result');
container.innerText = ('Searching...');
google.script.run.withSuccessHandler(function(result) {
container.innerText = '';
let data = https://www.songbingjia.com/android/JSON.parse(result);
console.log(data.data.length);
if (data.data.length === 0) {
container.insertAdjacentHTML('beforeend', '<
p>
No videos found in your search! Try another search term.<
/p>
');
}
let videoContainers = [];
for (var i = 0;
i <
data.data.length;
i++) {
videoContainers.push(data.data.splice(0, 10))
}
console.log(videoContainers);
videoContainers.forEach(function(items) {
items.forEach(function(vid) {
container.insertAdjacentHTML('beforeend', vid);
});
});
if (data.nextPage == undefined) {
next.disabled = true;
} else {
next.disabled = false;
next.dataset.page = data.nextPage;
next.dataset.cachekey = data.nextKey;
}
if (data.prevPage == undefined) {
prev.disabled = true;
} else {
prev.disabled = false;
prev.dataset.page = data.prevPage;
prev.dataset.cachekey = data.prevKey;
}
document.querySelector('#pagination').style.display = 'block';
progress.style.display = "none";
}).DTApi('DT', 'search', term, args);
}
function getPage(el) {
let page = el.dataset.page;
let key = el.dataset.cachekey;
search(page, key)
}
function paginate(array, page) {
return array.slice(page * 10, 10)
}
$("#doc").click(function() {
google.script.run.withSuccessHandler(showFrames).getVideos();
})
$("#comments").click(function() {
google.script.run.withSuccessHandler(showFrames).getCommentData();
});
function showFrames(frames) {
$("#embed").empty();
console.log(frames.length);
for (var i = 0;
i <
frames.length;
i++) {
$("#embed").append("<
iframe src='https://youtube.com/embed/" + frames[i] + "' width='100%' height='480' frameborder='0' allowfullscreen>
<
/iframe>
");
}
}
#progress {
display: none;
position: absolute;
right: 70px;
top: -5.5px;
}
.search {
width: 80%;
margin: 0 auto;
position: relative;
}
.search>
input[type="text"] {
width: 60%;
margin-right: 10px;
}
.search>
#search-args {
width: 60%;
}
#search-result {
margin-top: 15px;
min-height: 400px;
display: flex;
display: -webkit-flex;
flex-wrap: wrap;
flex-direction: row;
justify-content: space-evenly;
align-items: center;
align-content: center;
}
#search-result>
div {
transition: box-shadow ease-in-out 0.25s;
width: 300px;
height: 180px
}
#search-result>
.video-container:hover {
box-shadow: 0 0 5px blue;
cursor: pointer;
}
#pagination {
display: none;
text-align: right;
margin-right: 20px;
}
#preview {
margin: 15px auto 0;
}
.settings {
display: inline-block;
vertical-align: middle;
width: 35%;
position: relative;
}
#result {
display: inline-block;
margin-left: 15px;
}
#preview img {
width: 45%;
height: auto;
}
#preview iframe,
img {
vertical-align: middle;
}
#preview iframe+.settings {
margin-left: 30px;
}
#preview img+.settings {
margin-left: 30px;
}
.settings>
label {
line-height: 36px;
}
#link-text {
visibility: hidden;
font-size: 18px;
margin-bottom: 15px;
margin-left: 15px;
width: 60%;
}
#toggle:checked~#link-text {
visibility: visible;
}
.settings>
button {
display: block;
margin-bottom: 15px;
}
.video-container {
background-position: center center;
background-size: cover;
position: relative;
flex: 0 0 auto;
margin: 5px;
}
.type-icon {
display: block;
position: absolute;
bottom: 10px;
right: 10px;
height: 32px;
width: 32px;
}
.action-container {
display: block;
position: absolute;
top: 50%;
transform: translateY(-50%);
height: 65px;
background-color: rgba(250, 250, 250, 0.75);
width: 100%;
text-align: center;
opacity: 0;
transition: all ease-in-out 0.5s;
}
.action-container>
span {
padding: 5px;
line-height: 65px;
font-size: 24px;
}
span:hover {
cursor: pointer;
transition: all ease-in-out 0.15s;
}
.video-container:hover>
.action-container {
opacity: 1;
}
#embed {
width: 100%;
font-family: sans-serif;
}
#srcSelect {
width: 100%;
margin-bottom: 10px;
}
#srcSelect span {
display: inline-block;
margin-right: 15px;
color: rgba(255, 255, 255, 1);
background-color: rgba(0, 0, 255, 0.8);
cursor: pointer;
border-radius: 3px;
border: 1px solid rgba(0, 0, 180, 0.8);
padding: 12px;
}
#srcSelect span:hover {
color: rgba(0, 0, 180, 1);
background-color: rgba(255, 255, 255, 0.8);
}
<
base target="_top">
<
script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js">
<
/script>
<
link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons.css">
<
div class="search">
<
input type="text" id="search-input" value="" />
<
button id="search-btn" class="action" onclick="search(null)">
Search<
/button>
<
button onclick="document.querySelector('#search-result').innerHTML = ''">
Clear<
/button>
<
svg id="progress" version="1.1" id="loader-1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="40px" height="40px" viewBox="0 0 40 40" enable-background="new 0 0 40 40" xml:space="preserve">
<
path opacity="0.2" fill="#00d" d="M20.201,5.169c-8.254,0-14.946,6.692-14.946,14.946c0,8.255,6.692,14.946,14.946,14.946
s14.946-6.691,14.946-14.946C35.146,11.861,28.455,5.169,20.201,5.169z M20.201,31.749c-6.425,0-11.634-5.208-11.634-11.634
c0-6.425,5.209-11.634,11.634-11.634c6.425,0,11.633,5.209,11.633,11.634C31.834,26.541,26.626,31.749,20.201,31.749z"/>
<
path fill="#00d" d="M26.013,10.047l1.654-2.866c-2.198-1.272-4.743-2.012-7.466-2.012h0v3.312h0
C22.32,8.481,24.301,9.057,26.013,10.047z">
<
animateTransform attributeType="xml"
attributeName="transform"
type="rotate"
from="0 20 20"
to="360 20 20"
dur="0.5s"
repeatCount="indefinite"/>
<
/path>
<
/svg>
<
div id="search-args">
<
label>
<
input type="checkbox" name="queryArg" value="https://www.songbingjia.com/android/video" checked="checked"/>
Videos<
/label>
<
label>
<
input type="checkbox" name="queryArg" value="https://www.songbingjia.com/android/channel" />
Channels<
/label>
<
label>
<
input type="checkbox" name="queryArg" value="https://www.songbingjia.com/android/playlist" />
Playlists<
/label>
<
/div>
<
/div>
<
div id="preview">
<
/div>
<
div id="pagination">
<
button id="prev" data-page="" onclick="getPage(this)">
Previous<
/button>
<
button id="next" data-page="" onclick="getPage(this)">
Next<
/button>
<
/div>
<
div id="search-result">
<
/div>
我收到的错误是:“未捕获的参考错误:未定义google”,该错误表示该问题发生在第360行内。我从原始编辑器逐行复制了整个ass代码,其中360行是:
} else {
我该怎么办?在过去的3天里,我一直坚持不懈地检查代码,除了没有发现搜索结果外,没有发现任何错误的证据。我确实为此感到迷this,需要编码骑兵。
答案正如用户在评论中所说,当您使用Apps脚本[1]时,
google
对象会自动导入html文件中。您需要删除以下行:<
script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&
callback=..." async defer>
<
/script>
,这会导致错误,如其他问题[2]所述。[1] https://developers.google.com/apps-script/guides/html/reference/run
[2] Google Maps API throws "Uncaught ReferenceError: google is not defined" only when using AJAX
推荐阅读
- “画布(Android Studio中试图绘制太大的位图”问题)
- 试图将Google Pay集成到我的Android应用中
- 身份验证Apollo Graphql for android
- [android 8.0中的android套接字连接
- java.lang.IllegalStateException(找不到方法-初学者的Android编程书ERROR [duplicate])
- Android-如何在ActionBar中实现“赞”按钮
- 如何在Unity中使用由android studio制作的SQLite数据库()
- 要从Android设备删除图片吗()
- 当活动不在前面时,在Android中暂停CountDownTimer